logo头像

技术是一种信念

maven中jar的相关处理

本文于318天之前发表,文中内容可能已经过时。

引入外部jar包

引入项目lib文件夹下的jar包

  • 首先在在dependency中设定scope 为system,并且指定systemPath。
1
2
3
4
5
6
7
<dependency>
<groupId>com.hope.cloud</groupId> <!--自定义-->
<artifactId>cloud</artifactId> <!--自定义-->
<version>1.0</version> <!--自定义-->
<scope>system</scope> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
<systemPath>${basedir}/lib/cloud.jar</systemPath> <!--项目根目录下的lib文件夹下-->
</dependency>
  • 编译阶段指定外部lib
1
2
3
4
5
6
7
8
9
10
11
12
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>lib</extdirs><!--指定外部lib-->
</compilerArguments>
</configuration>
</plugin>

将第三方jar包引入本地maven库

  • cmd 进入jar包所在路径,执行以下命令
1
mvn install:install-file -Dfile=cloud.jar -DgroupId=com.hope.cloud -DartifactId=cloud -Dversion=1.0 -Dpackaging=jar
  • 引入依赖
1
2
3
4
5
<dependency>
<groupId>com.hope.cloud</groupId>
<artifactId>cloud</artifactId>
<version>1.0</version>
</dependency>

将所有引用的jar包打包到一个jar中

java的jar包太多了,有时候我们为了方便执行,希望把所有引用的jar包打包到一起。maven可以做到吗?

肯定是可以的,需要使用maven-assembly-plugin这个maven插件,使用方法说明如下:

  • 首先在pom文件的build节点中添加这个插件的引用
  • 在configuration /archive /manifest 节点中指明jar包中main方法所在类
  • 在executions / execution 中设置make-assembly。

代码示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!--这里要替换成jar包main方法所在类-->
<mainClass>cn.outofmemory.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- 指定在打包节点执行jar包合并操作 -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

##