Maven是一个强大的项目管理工具,能够自动下载依赖、编译、测试、打包、部署等等操作。在实际开发中,我们常常需要将项目打成jar包进行发布或者部署到服务器上,下面就来介绍一下Maven打jar包的三种方式。
一、使用Maven命令打jar包
Maven提供了一条命令可以直接打出jar包:
mvn package
执行这个命令后,Maven会自动执行以下步骤:
- clean:清空target目录下的旧文件
- compile:编译源代码
- test:运行测试代码
- package:将代码打成jar包
最后生成的jar包会在target目录下。
二、使用Maven插件打jar包
除了直接使用Maven命令打jar包,还可以使用Maven插件来完成。比如使用maven-jar-plugin
插件,只需要在pom.xml
文件中添加以下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
其中mainClass
为指定程序的启动类。执行以下命令即可生成jar包:
mvn package
使用maven-shade-plugin
插件,则可以将当前项目的依赖项一起打包到生成的jar包中。只需要在pom.xml
文件中添加以下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
执行以下命令即可生成打包好的jar包:
mvn package shade:shade
三、使用Maven Assembly插件打jar包
Maven Assembly插件是一种专门用于处理Java项目的打包工具,可以打出各种不同的包,例如zip、war、tar、tar.gz、jar等等。
使用Maven Assembly打jar包需要在pom.xml
文件中添加以下配置:
<build>
<plugins>
<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>
<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>
其中descriptorRefs
用于指定打出的包的格式,jar-with-dependencies
表示将依赖打到jar包中。执行以下命令即可生成打包好的jar包:
mvn package assembly:assembly
示例说明
示例一
假设有一个命令行程序需要打包成jar包并在命令行中运行,那么可以通过以下步骤打包:
- 创建Maven项目
- 编写代码
- 添加命令行参数解析工具JCommander的依赖
- 使用Maven命令或插件打包
在代码中创建一个main方法,使用JCommander解析命令行参数:
public class App
{
@Parameter(names = "--name", required = true)
private String name;
public static void main( String[] args )
{
App app = new App();
JCommander.newBuilder()
.addObject(app)
.build()
.parse(args);
System.out.println("Hello " + app.name + "!");
}
}
然后在pom.xml
文件中添加JCommander
的依赖:
<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>1.78</version>
</dependency>
使用maven-jar-plugin
插件打包即可:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
在命令行中执行以下命令即可运行程序:
java -jar target/app-1.0-SNAPSHOT.jar --name world
输出结果为:
Hello world!
示例二
假设在Java Web项目中使用了MySQL数据库,需要将项目打包成一个可执行的jar包,并在服务器上运行。那么可以通过以下步骤打包:
- 创建Maven项目
- 编写代码
- 添加MySQL依赖
- 使用Maven命令或插件打包
- 在服务器上运行
在代码中使用com.mysql.jdbc
来连接MySQL数据库:
public class App
{
public static void main( String[] args )
{
String url = "jdbc:mysql://localhost:3306/dbname";
String user = "root";
String password = "mypassword";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
在pom.xml
文件中添加MySQL依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
使用maven-shade-plugin
插件打包:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.jboss.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
执行以下命令即可生成打包好的jar包:
mvn package shade:shade
在服务器上运行:
java -jar target/app-1.0-SNAPSHOT.jar
完整的步骤和示例说明如上。希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Maven打jar包的三种方式(小结) - Python技术站