在项目中需要使用maven的打包工具,生成zip压缩包,使用的插件是assembly-plugin;使用maven的package命令直接生成war包。因为一些特殊的原因,需要使用一些本地的jar进行依赖,加载外部jar后编码过程中没有任何问题,但是打包时一直报“程序包不存在”。
思考一下:Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所以虽然在开发过程中项目正常依赖没有任何问题,但是打包的时候肯定就找不到本地的jar了。
这种问题有很多解决方案,比如加入本地仓库、搭建maven私服等,如需这些解决方案自行谷歌百度,资料很多。
因为maven编译使用的插件是maven-compiler-plugin,所以只能在maven-compiler-plugin上找问题了,正常情况下的maven-compiler-plugin简单配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin>
如果需要在打包的时候依赖本地 jar,需要修改增加如下配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <!-- 添加引入本地jar组件 此方法适用于低于 maven 的3.1版本之前--> <compilerArguments> <extdirs>${project.basedir}/src/lib</extdirs> </compilerArguments> </configuration> </plugin>
如果使用的maven版本高于3.1,上述配置已被废弃,需要做如下修改:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <!-- 添加引入本地jar组件 --> <compilerArgs> <arg>-extdirs</arg> <arg>${project.basedir}/src/lib</arg> </compilerArgs> </configuration> </plugin>
需要注意的是最好添加${project.basedir}以便有更好的兼容性。
修改上述编译插件后,打包正常,不再报错,但是有一个新的问题产生。生成的zip包并不包含依赖的本地jar。
修改maven-assembly-plugin插件的配置文件,增加如下配置:
<fileSet> <directory>src\lib</directory> <outputDirectory>lib</outputDirectory> </fileSet>
意思是把src\lib下的jar输出到target根目录lib下。
至此,使用maven的package命令,已能正常运行,并成功把本地jar包打入zip压缩包的lib目录下。