这个插件提供了构建 jar 的能力。
Goals
- jar:jar 为你的项目类包含资源创建一个 jar 文件。
- jar:test-jar 为你项目的 test classes 创建一个 jar 文件
Useage
1
2
3
4
5
6
7
8
|
project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.project</groupId>
<artifactId>core</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- <packaging>jar</packaging> -->
</project>
|
由于“jar”是默认的包装类型,在这种情况下不需要设置它。除了上述之外,您通常还需要一些真正的 java 源文件,它们应该位于 src/main/java
中。如果您需要类路径上的额外资源(例如属性文件),它们应该位于 src/main/resources
中。现在我们可以使用以下命令创建一个 JAR 文件:
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
|
<project>
...
<build>
<!-- To define the plugin version in your parent POM -->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
</plugin>
...
</plugins>
</pluginManagement>
<!-- To use the plugin goals in your POM or parent POM -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
</plugin>
...
</plugins>
</build>
...
</project>
|
要想jar包能直接通过运行
需要满足
- 在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里;
- 要能加载到依赖包
maven-jar-plugin 和 maven-dependency-plugin 打包可执行 jar
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
28
29
30
|
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<!-- 生成MANIFEST.MF的设置 -->
<archive>
<index>true</index>
<manifest>
<!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 -->
<addClasspath>true</addClasspath>
<!-- 依赖放在 jar 路径的 lib 目录中 -->
<classpathPrefix>lib/</classpathPrefix>
<mainClass>
com.ynthm.demo.App
</mainClass>
</manifest>
</archive>
</configuration>
...
</plugin>
</plugins>
</build>
...
</project>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution> <!-- 执行器 -->
<id>copy-dependencies</id>
<phase>package</phase> <!-- 阶段 -->
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- 拷贝项目依赖包到configcenter_lib/目录下 -->
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
|
附录