1. 打包成war包
1.1 若pom.xml中已经指定<packaging>war</packaging>
进入到项目根目录,直接执行如下命令即可
mvn clean package
1.2 若pom.xml中没有指定<packaging>war</packaging>
进入到项目根目录,执行如下命令:
mvn clean package
在项目的 target 目录中找到生成的 WAR 文件。
运行以下命令来将 POM 文件中的依赖一起打包进 WAR 文件:
mvn war:war
这个命令会使用 Maven 的 war 插件重新打包 WAR 文件,包含 POM 文件中定义的依赖。
在项目的 target 目录中找到更新后的 WAR 文件,其中包含了 POM 文件中的依赖。
2. 打包成jar包
需要使用maven-shade-plugin或maven-assemply-plugin插件。
2.1 使用maven-shade-plugin查看
在pom.xml文件中添加:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
执行 mvn clean package 命令,会生成两个 JAR 文件。一个以 “original-” 开头,另一个是最终生成的 JAR 文件。
例如,如果你的项目名称是 my-app,当你运行 mvn clean package 命令时,Maven Shade 插件将生成两个文件:
- original-my-app.jar:原始 JAR 文件,包含所有的依赖项。
- my-app.jar:经过 Maven Shade插件处理后的最终 JAR 文件,它是一个包含了所有依赖项的自包含可执行 JAR 文件。
问题:
执行该jar包时,需要指定主类,即需要使用java -cp my-app.jar com.example.MainClass
命令来执行。
但使用maven-assemply-plugin插件可以设置主类,解决该问题。
1.2 使用maven-assemply-plugin插件
在pom.xml文件中添加:
<groupId>groupId</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<!-- 添加 maven-assembly-plugin 插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<!-- 设置主类 -->
<mainClass>com.example.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<!-- 指定打包描述符为 jar-with-dependencies -->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
执行 mvn clean package 命令,会生成一个 JAR 文件,生成的JAR文件名将是my-project-1.0.0-jar-with-dependencies.jar。
因为设置主类,所以可以使用java -jar my-project-1.0.0-jar-with-dependencies.jar
命令直接执行jar包。
可以通过添加<finalName>my-custom-name</finalName>
标签自定义jar包名称,但添加该标签会导致pom.xml中的依赖不能打包进去。