项目启动时SqlTemplate找不到

image.png

image.png

image.png

debug时能直接打开finalFileName对应的文件,但是url依然等于Null

评论区

JFinal

2019-04-17 17:03

删掉 arp.setBaseTemplatePath(...)

arp.addSqlTemplate 带上目录:
arp.addSqlTemplate("/sql/all_sqls.sql");

正负余

2019-04-17 17:06

@JFinal arp.addSqlTemplate(PathKit.getRootClassPath() + "/sql/all_sqls.sql"); 这样配置吗

正负余

2019-04-17 17:06

@JFinal 这样还是报错

正负余

2019-04-17 17:06

@JFinal 同样的异常信息

JFinal

2019-04-17 17:08

再重复一次:
1:删掉 arp.setBaseTemplatePath(...) 这行代码
2:arp.addSqlTemplate(...) 改成:arp.addSqlTemplate("/sql/all_sqls.sql");

JFinal

2019-04-17 17:09

sql 管理功能的配置,永远不要使用 PathKit

正负余

2019-04-17 17:12

@JFina 修改后能引入all_sqls.sql
但是在all_sqls.sql使用以下代码引入其他的sql文件
#namespace("agentUser")
#include("/front/agentUser.sql")
#end
报错
java.lang.IllegalArgumentException: File not found in CLASSPATH or JAR : "front/agentUser.sql"
at com.jfinal.template.source.ClassPathSource.(ClassPathSource.java:67)

JFinal

2019-04-17 17:15

@正负余 你仔细看一下 jfinal club 最新版本中的用法

#include("/front/agentUser.sql") 这行代码,你要确保 agentUser.sql 文件在 all_sqls.sql 文件所在目录的 front 子目录以下

正负余

2019-04-17 17:17

@JFinal 已解决 需要将#include("/front/agentUser.sql") 修改为#include("front/agentUser.sql")

JFinal

2019-04-17 17:18

要仔细搞清楚这个问题,需要知道如下几点:
1:sql 管理使用的是 Enjoy 模板引擎管理 sql 文件

2:sql 管理使用的 Engine 对象被默认配置了 engine.setToClassPathSourceFactory()
也就是说会去 class path 和 jar 包中找 sql 文件

3:标准 maven 项目的 src/main/resources 目录默认也可以认为是 class path,因为该目录下面的所有文件会被 copy 到 class path 之下

4:如果碰到与路径有关的问题,看一下 enjoy 引擎的文档:
https://www.jfinal.com/doc/6-2
注意这一小节《6、从 class path 和 jar 包加载模板配置》

碰到问题不要乱猜,要知道原由

JFinal

2019-04-17 17:19

最后:强烈建议 sql 文件放在 src/main/resources 目录或者其子目录下,在添加 sql 文件时候,只需要直接使用其文件名,或者其下的 子目录名 + 文件名

正负余

2019-04-17 17:32

@JFinal 嗯嗯 好的,这个是从3.5升级至3.6出现的问题

JFinal

2019-04-17 17:40

@正负余 升级文档中详细说明过这个问题:
https://www.jfinal.com/doc/14-1

简单一句话就是:jfinal 3.6 默认帮你调用了一次:
arp.getEngine().setToClassPathSourceFactory();

所以,默认会去 class path 和 jar 包之中找 sql 文件

正负余

2019-04-17 17:44

@JFinal 好嘞 感谢波总的解答

taosheng

2019-06-16 21:41

我是用的3.5的,arp.addSqlTemplate("all.sql");启动时也是报all.sql找不到啊

JFinal

2019-06-16 22:48

@taosheng 删除 arp.setBaseTemplatePath(...);

热门反馈

扫码入社