项目打包成jar的问题

我jfinal之所以打包成war,是因为war可以直接部署文件夹,这样的话,如果修复bug的话,我不需要重新上传整个项目,只需要上传改动的class或者html等


若果使用现在的最新方式,打包成jar的话,是不是只能更新整个jar。

如果可以只更新的指定的文件的,我想jar比war要方便的多了。

评论区

JFinal

2019-04-15 19:33

使用 jfinal 推荐的打包方式,如果只改了 java 代码,则只需要上传当前项目的那个小 jar 包覆盖原有 jar 包即可,也就是 lib 目录下面其中一个 jar 包

如果改了 html css js 这类文件,只需要上传覆盖掉 webapp 下面的目录即可,比打成 war 上传整个 war 包要方便得多,上传的数据量也小得多

上传完成后使用下面的代码重启项目:
./jfinal.sh restart

jfinal 的打包方式使用的是 maven 官方提供的插件,可靠性、稳定性是有保障的。注意看 pom.xml 中的 maven-assembly-plugin, 这个就是 maven 官方提供的打包插件,放心使用

tuxming

2019-04-16 11:58

谢谢波总,看来我是没怎么看懂,我以为是把所有的打包成一个jar

JFinal

2019-04-16 22:02

@tuxming 将所有的东东打成一个 jar ,这个叫所谓的 fatjar 模式,jfinal 官方也提供了这种打包模式

可以在首页下载 jfinal demo for maven 里头有一个说明文件,详细说明了 fatjar 模式如何玩

fatjar 模式比较适合于没有 web 静态资源的项目

cqztt

2020-06-03 09:06

@JFinal 如果不是Maven项目,但是是web项目,MYSQL数据库,打包后运行的时候出现了空指针异常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),这个问题改怎么解决呢。

JFinal

2020-06-03 11:32

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

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

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

热门反馈

扫码入社