maven打包时包含本地jar

项目中需要使用maven的打包工具,生成zip压缩包,使用的插件是assembly-plugin。因为一些特殊的原因,需要使用一些本地的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>
				<version>3.5.1</version>
				<configuration>
					<source>${jdk.version}</source>
					<target>${jdk.version}</target>
					<showWarnings>true</showWarnings>
					<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目录下。

 

 

第二种方法:

<dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>jave</artifactId>
            <version>1.0.2</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/jave-1.0.2.jar</systemPath>
        </dependency>

 

posted @ 2018-11-06 11:55  陈扬天  阅读(2292)  评论(0编辑  收藏  举报