Maven打jar包的三种方式(小结)

Maven是一个强大的项目管理工具,能够自动下载依赖、编译、测试、打包、部署等等操作。在实际开发中,我们常常需要将项目打成jar包进行发布或者部署到服务器上,下面就来介绍一下Maven打jar包的三种方式。

一、使用Maven命令打jar包

Maven提供了一条命令可以直接打出jar包:

mvn package

执行这个命令后,Maven会自动执行以下步骤:

  1. clean:清空target目录下的旧文件
  2. compile:编译源代码
  3. test:运行测试代码
  4. 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包并在命令行中运行,那么可以通过以下步骤打包:

  1. 创建Maven项目
  2. 编写代码
  3. 添加命令行参数解析工具JCommander的依赖
  4. 使用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包,并在服务器上运行。那么可以通过以下步骤打包:

  1. 创建Maven项目
  2. 编写代码
  3. 添加MySQL依赖
  4. 使用Maven命令或插件打包
  5. 在服务器上运行

在代码中使用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技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • java时间段查询将00:00:00更换成23:59:59

    针对Java时间段查询将00:00:00更换成23:59:59的问题,我可以提供以下攻略: 方法一:使用时间处理类 在Java中,可以使用Java提供的时间处理类来实现将时间段的起始时间和结束时间从00:00:00和23:59:59的时间戳互相转换,具体实现步骤如下: 首先,定义起始时间和结束时间的字符串,如下所示: String startTimeStr …

    Java 2023年5月20日
    00
  • 什么是Java类装载机制?

    Java类装载机制指的是JVM如何加载和查找类的过程。在Java程序运行过程中,JVM需要定位并加载需要使用的类文件,Java类装载机制便是完成这个过程的。 Java 类装载有五个过程:加载、验证、准备、解析和初始化。以下是Java类装载的详细使用攻略。 1. 加载 加载是指将类的字节码数据加载到内存中,并为之创建一个 java.lang.Class 对象。…

    Java 2023年5月11日
    00
  • SpringBoot外部化配置示例解析

    下面我将为你详细讲解“SpringBoot外部化配置示例解析”的完整攻略。 简介 在开发过程中,我们通常会使用外部配置文件,比如properties或者yaml格式的配置文件。其中,Spring Boot利用spring-boot-configuration-processor自动获取并识别配置文件中的属性,使得在Java代码中可以直接使用@Autowire…

    Java 2023年5月19日
    00
  • Spring Boot 通过 Mvc 扩展方便进行货币单位转换的代码详解

    接下来我将详细讲解“Spring Boot 通过 Mvc 扩展方便进行货币单位转换的代码详解”的完整攻略,过程中将包含两条示例。 一、背景介绍 在开发过程中,我们经常需要进行货币单位转换。如美元和人民币之间的转换等。本文将通过 Spring Boot 中的 Mvc 扩展来实现货币单位转换。 二、技术准备 在进行具体实现之前,我们需要准备以下技术: 1. Sp…

    Java 2023年5月20日
    00
  • 一篇文章告诉你JAVA Mybatis框架的核心原理到底有多重要

    一篇文章告诉你JAVA Mybatis框架的核心原理到底有多重要 Mybatis 是一个基于Java 的持久层框架,它能够自动执行SQL语句,并将结果映射到 Java 对象中。Mybatis 基于 JDBC 进行了封装,其目的是让 JDBC 更易于使用。 Mybatis框架的核心原理 Mybatis 框架的核心原理在于数据映射和 SQL 生成。在 Mybat…

    Java 2023年5月20日
    00
  • Linux中使用Shell脚本查看Java线程的CPU使用情况

    下面是在Linux中使用Shell脚本查看Java线程的CPU使用情况的完整攻略: 1. 确认Java进程ID 在使用Shell脚本来查看Java线程CPU使用情况之前,我们需要确定Java应用程序的进程ID。可以使用命令: ps -ef | grep java 该命令将显示运行中的所有Java进程的进程ID、启动时间等信息,如下所示: root 1234 …

    Java 2023年5月20日
    00
  • Java计算一个数加上100是完全平方数,加上168还是完全平方数

    题目简述:Java计算一个数加上100是完全平方数,加上168还是完全平方数 根据题目中的描述,可以得到以下两个方程:1. n + 100 = x^22. n + 168 = y^2 其中,n表示待求解的数,x和y分别是n加上100和n加上168后所对应的完全平方数。 这两个方程可以同时求解,步骤如下: 首先,对于x^2和y^2,我们可以利用Java的Mat…

    Java 2023年5月19日
    00
  • 详解Junit 测试之 Spring Test

    当我们用Spring框架进行开发时,经常需要对一些业务逻辑进行测试,这就需要使用到Junit进行单元测试。而Spring Test提供了一些方便的用例和注释,来使测试更加容易和完善。本篇文章将详细讲解如何使用Junit进行Spring测试。 前置条件 在进行Spring Test的开发前,需要确保以下几项内容: 已经配置了Spring框架的依赖。 已经配置了…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部