求助大神,JFinal项目打包成jar运行的时候报错。

at com.jfinal.kit.PathKit.detectWebRootPath(PathKit.java:86)
        at com.jfinal.kit.PathKit.getWebRootPath(PathKit.java:68)
        at com.jfinal.server.JettyServer.getStoreDir(JettyServer.java:154)
        at com.jfinal.server.JettyServer.persistSession(JettyServer.java:161)
        at com.jfinal.server.JettyServer.doStart(JettyServer.java:92)
        at com.jfinal.server.JettyServer.start(JettyServer.java:64)
        at com.jfinal.core.JFinal.start(JFinal.java:159)
        at com.thinktwice.common.MgConfig.main(MgConfig.java:117)


评论区

JFinal

2020-06-02 14:37

异常信息不全

此外,异常信息中出现了 JettyServer, 显然打包方式就错了

正确的打 jar 包运行的方式需要下载本站首页右侧的 jfinal_demo_for_maven-4.9.zip

里头有一个目录叫:"启动说明/fatjar-打包部署方法",下面有一个文件叫:
"fatjar-打包部署方法.txt", 这个文件详细告诉了你如何打成 jar 包去运行

cqztt

2020-06-03 09:10

@JFinal java.lang.RuntimeException: java.lang.NullPointerException
at com.jfinal.kit.PathKit.detectWebRootPath(PathKit.java:86)
at com.jfinal.kit.PathKit.getWebRootPath(PathKit.java:68)
at com.jfinal.server.JettyServer.getStoreDir(JettyServer.java:154)
at com.jfinal.server.JettyServer.persistSession(JettyServer.java:161)
at com.jfinal.server.JettyServer.doStart(JettyServer.java:92)
at com.jfinal.server.JettyServer.start(JettyServer.java:64)
at com.jfinal.core.JFinal.start(JFinal.java:159)
at com.thinktwice.common.MgConfig.main(MgConfig.java:117)
Caused by: java.lang.NullPointerException
at com.jfinal.kit.PathKit.detectWebRootPath(PathKit.java:83)
... 7 more
您好,这是报错信息。但是我的这个项目不是maven的项目,该怎么打包呢?

JFinal

2020-06-03 11:33

@cqztt

如果不是 maven 项目,可以参考这些:
https://jfinal.com/share/422
https://jfinal.com/share/786

但是强烈建议使用 maven 项目来打 jar 包,要方便得多

maven 早已普及,传统方式该淘汰了

cqztt

2020-06-03 14:28

@JFinal 第二个分享也是maven的。按照第一个方式打包成功了,非常感谢,解决了燃眉之急,但是登录界面半天出不来是怎么回事呢?因为项目写了jsp,maven不支持jsp,而且是之前的项目。新入职接过来的。

JFinal

2020-06-03 14:35

@cqztt 如果你使用的是 jfinal 较高的版本,想要支持在浏览器中直接访问 .jsp 文件,需要配置:
public void configConstant(Constants me) {
me.setDenyAccessJsp(false);
}

这是为了防止破坏者上传恶意 .jsp 文件,然后在浏览器直接: http://xxx.yyy.com/path/xxx.jsp

上传 jsp 文件是常用攻击 java web 项目的方式

当然, jfinal 的文件上传已经对上传 jsp 文件做了限制,使用最新版本的 cos:
cos-2020.4.jar

新版本 jfinal 引入 setDenyAccessJsp(boolean) 是为了加固安全性

JFinal

2020-06-03 14:36

@cqztt 补充一下: setDenyAccessJsp(boolean) 只是限制了浏览器地址栏直接访问 .jsp 文件, 并没有限制 renderJsp(...) 访问 jsp 模板

cqztt

2020-06-03 14:45

@JFinal 看了一下,cmd下面运行打成的jar包少了下面这一句:Sql: select * from tb_dictionary order by id asc。jFinal web非maven项目,MySQL能打包成exe运行吗?

JFinal

2020-06-03 15:23

@cqztt 方法在前面已经告诉你了,至于少了输出 sql 的事,你得确保 arp.setDevMOde(true),还得确保 arp.setShowSql(true) 这两个配置都是 true

cqztt

2020-06-03 15:32

@JFinal 项目用的是jFinal1.8

JFinal

2020-06-03 15:33

@cqztt jfinal 1.8 应该也有这两个配置,你检查一下