IDEA+gradle将springBoot项目打可运行的Jar包
IDEA也是最近才使用,之前一直用Eclipse
gradle也是最近在使用,之前一直用maven
刚使用新的工具总和初学者一样会遇到一些问题,就像是打包这个小事,之前用eclipse+maven特别简单,换了新的IDEA+Gradle各种不适应,打不出可以运行的jar包。去网上找了很我文章不是版本对不上就是说的不透彻;
本文用的是IntelliJ IDEA 2018.2.5 x64。废话有点多,接下来开始干活。
首先你要有SpringBoot或是SpringCloud项目
又是废话,看这篇文章的人基本上都是有项目打不出包的,那就不说创建项目的过程了。
我用的是一个SpringCloud的demo项目。
拿其中一个项目打包做例子hpt-sso,hpt-sso引用了hpt-base,打包时我会把hpt-base.jar也打进去。
步骤:
-
使用快捷键盘ctrl+shift+alt+s ,打开打包的界面。
-
点击Artifacts,再点击加号(+);点击JAR,选择From modules with dependencies…;
在这里插入图片描述 -
选择Module,就是你要打包成jar的项目,选择MainClass,就是你JAR中要运行的Main方法,JAR files from libraries我选择第2项copy to the output directory and link via manifest,因为我添加依赖包的目录,依赖包在jar包的外面(lib目录与hpt-sso.jar同级);选择META-INF/MANIFEST.ME的目录,该目录下不能有META-INF/MANIFEST.ME,如果有就删除掉,不然已存在会创建失败;最后点击OK
-
点开“Available Elements”中你要打包的项目,右击中你的项目名_main,点击Put into Output Root
这时我们看到
“hpt-base_main”,这是引用项目的(没有引用项目的没这个),因为我等下要引用htp-base.jar这里我可以先把它删除掉,不然等下可能把引用项目的class文件也打包进来了,这样hpt-base.jar和hpt-base下的所有class并存没必要。
“hpt-sso_main”,这是hpt-sso项目的所有class文件,这肯定要保留
除此之外还有很多我们要打包项目所依赖的第三方JAR包。 -
接下来我们在output root下创建一个lib文件夹,然后把所有jar包放到lib下,移动lib的时候可以用shift多选lib,然后用右键拖到lib目录***:左键只能拖一个),不要把我们的主jar包也放进去,hpt-sso.jar要跟lib同级;
-
引用项目的包:如果有引用项目,可以添加引用项目的包,比如hpt-base.jar这个包是我之前像这篇文章一样创建好的,我们可以在右边的Artifacts中选择,双击就到左边来了,一样别忘了拖到lib目录下。(没有引用项目这步就可以省略了)
-
添加配置文件,右击你要最终打包的jar名(hpt-sso.jar) -> +Add Copy of -> Directory Content,打开新窗口
选择项目中的配置文件目录(resources),点击OK
最终我们得到一个如下结构的目录 -
编辑Class Path,将lib下的引用包放到Edit Classpath中,别忘记在包前加上lib/。如果引用jar包较多可以shift选中lib下的所有包复制到记事本或其它编辑器中编辑完再粘贴到Edit Classpath框中。我使用的是Excel编辑的。最后点击OK就完成了所有jar包打包的准备工作。
-
打包 使用Build–>Build Artifacts,选择你要build的jar点击build,打包完成去输出目录下查看结果输出目录在
查看目录结构,lib下有我们所有的引用jar包;
用解压工具打开htp-sso.jar查看目录结构:正常,配置文件application.yml也存在;
查看META-IN\MANIFEST.MF内容,都正常,这样打包就成功了。
12. 运行 用cmd命令,进入jar包所在目录,执行命令:java -jar xxx.jar,项目运行成功。
最后:IDEA+GRADLE打个可运行的jar包挺麻烦的。
再最后:整体结束,形成一篇文章好累啊。
再再最后:一遍操作成功,后面再操作就简单了,这个打包*配置度很灵活,能打出自己想要的jar包中的内容,付出的代价就是复杂点,要自己配置。
最后一个最后:如果idea能有个默认的傻瓜一键打jar包就好了,再有这个灵活配置,二者并存,完美。