目录

Apache Maven JAR Plugin

这个插件提供了构建 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
mvn package
 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包能直接通过运行

1
java -jar xxx.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>

附录