博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven引入本地依赖Jar到可执行Jar包中
阅读量:5886 次
发布时间:2019-06-19

本文共 2764 字,大约阅读时间需要 9 分钟。

在Maven中,默认地,是不会将依赖的Jar包打入可执行Jar包的,如果需要将依赖打入可执行Jar包,需要在pom中添加maven-assembly-plugin插件,这个很容易实现,但是在正规开发中不推荐这样使用,为什么?因为稍微大型一些的项目都至少有几十个依赖项,而每次打包都将这些Jar包打入可执行Jar,使得最后生成的可执行Jar体积非常大。标准的做法是,将所有的依赖Jar包都打入lib目录中,而在可执行Jar的MANIFEST.MF中指定lib路径即可。这也很容易实现,并不是本文的重点,本文的重点是如何将不在Maven中央仓库中的Jar包,或者说依赖本地的Jar包打入可执行Jar,并更新MANIFEST.MF文件。

例如在我的Maven项目中,需要依赖本地Jar,首先将依赖的Jar复制到src/main/resources/lib目录下,引用如下

1
2
3
4
5
6
7
<dependency>
<groupId>com.yuewen</groupId>
<artifactId>lucene</artifactId>
<version>1.0.0-SNAPSHORT</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/lucene-1.0.0-SNAPSHORT.jar</systemPath>
</dependency>

 

这里的scope只能是system范围,systemPath属性指定Jar包的路径。

下一步将所有依赖的Jar包打入lib目录中,方式如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!--将依赖的资源全部打入lib目录-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
</configuration>
</execution>
</executions>
</plugin>

 

至此,你在Maven项目中,依赖的所有Jar都被打入到target/lib目录下了,剩下的关键一步就是如何添加MANIFEST.MF文件了。在pom中添加如下插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!--打包插件,在Jar包中添加Class-Path和Main-Class-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<!--使用自己的Manifest文件,运行正常-->
<!--<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>-->
<!--使用插件添加的Manifest文件,运行正常,一定要注意Manifest中jar包名称和lib文件夹下jar包名称版本号后缀等一定要一致,否则找不到依赖jar,此处有坑-->
<manifest>
<addClasspath>true</addClasspath>
<!--指定依赖资源路径前缀-->
<classpathPrefix>lib/</classpathPrefix>
<mainClass>cn.codepub.maven.test.Main</mainClass>
</manifest>
<!--可以把依赖本地系统的Jar包加入Manifest文件中-->
<manifestEntries>
<Class-Path>lib/lucene-1.0.0-SNAPSHORT.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>

运行mvn clean package执行打包,完成之后,将包含依赖资源的lib目录和可执行Jar放在同一级目录下即可,这样在运行java -jar xxx.jar的时候,可执行Jar包可以准确地找到依赖Jar包。并且以这种方式打出来的可执行Jar体积非常小,一般都是几百KB而已。完整的MANIFEST.MF文件如下所示

1
2
3
4
5
6
7
Manifest-Version: 1.0
Built-By: wangxu
Class-Path: lib/lombok-1.16.12.jar lib/guava-20.0.jar lib/log4j-api-2.
7.jar lib/log4j-core-2.7.jar lib/lucene-1.0.0-SNAPSHORT.jar
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_45
Main-Class: cn.codepub.maven.test.Main

转载于:https://www.cnblogs.com/523823-wu/p/7635358.html

你可能感兴趣的文章
DEM 制作
查看>>
js实现分页列表添加样式
查看>>
HDU 1197 Specialized Four-Digit Numbers
查看>>
ARP之windows下的ARP命令
查看>>
Http Header里的Content-Type
查看>>
怎么查看mysql的安装目录
查看>>
win7安装sqlserver2008
查看>>
PHP验证码文件类
查看>>
详解Android Intent
查看>>
Android——简单对话框实现
查看>>
java基础小项目练习之1----3天做出飞机大战
查看>>
MySQL 数据类型
查看>>
C# Xpath
查看>>
软件工程第一次作业
查看>>
hadoop
查看>>
js函数
查看>>
实验3 编程、编译、连接、跟踪
查看>>
Codeforces Round #462 (Div. 2)
查看>>
(5)Flask项目会员登录页
查看>>
五子棋AI大战OC实现
查看>>