最近在弄一个项目,里面涉及到的jar比较多,还涉及到一些画图插件,以及一些静态资源。
因为涉及的东西多,导致打包后的Jar包比较大,每次的jar包传输都非常消耗时间。
决定整理一次项目打包。
如果项目比较小使用idea内置Artifacts打包也是一个不错的选择。
可能我头一次接触artifacts,对他的操作也不是很熟悉。在网上找了一些操作方法发现都大同小异。
虽然说他打包能把依赖和业务代码分开,但是他给业务代码打包是把整个src下的所有文件一起打包,得不到我想要的结果.
于是放弃了该打包方式,还是回归到maven打包。
总的来说,对我来说我只需要完成两个部分操作就能满足我的需求:
第一部分:提取依赖
相对来说这一步比较简单,使用maven-dependency-plugin插件,提取依赖到lib包下,具体代码如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
这里唯一需要注意的是${project.build.directory}/lib,他指定了copy依赖的路径。
第二部分:业务打包
打包的重点就在这个地方。
按照需求,需要指定文件/文件夹不参数打包。废话少说,先上代码:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!-- 生成的jar包存放位置 -->
<outputDirectory>${project.build.directory}</outputDirectory>
<archive>
<!--配置文件加载位置-->
<manifestEntries>
<Class-Path>config/</Class-Path>
</manifestEntries>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.findata.platform.PlatformApplication</mainClass>
</manifest>
</archive>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>static/**</exclude>
<exclude>template/**</exclude>
<exclude>document/**</exclude>
<exclude>font/**</exclude>
<exclude>echarts-covert/**</exclude>
<exclude>phantomjs-2.1.1-linux-x86_64/**</exclude>
<exclude>phantomjs-2.1.1-windows/**</exclude>
</excludes>
</configuration>
</plugin>
这里需要注意的就会多一些,
一是jar包存放的位置,可以按照自己需求调整
二是manifestEntries,设置配置文件的位置,这个地方需要注意下
他不会主动的给你copy配置文件,可以手动在业务jar包同级创建config目录,并把配置文件放入目录下
三是addClasspath,把jar包路径添加到manifest中,并指定入口
四是excludes这块,这块就是把不需要打包的路径/文件排除掉。
基本上就这四部,是不是很简单。如果想要控制打的jar的名字
只需要添加finalName标签就可以改名。
至此,我的要求就全部已经可以实现。