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 Swing程序设计实战

    Java Swing程序设计实战攻略 Java Swing程序设计实战是Java界面开发的重要书籍,其中讲解了Swing界面组件的使用、事件处理、布局管理器等内容,并有大量的编程实例。攻略分为以下几个部分: 程序设计实践 掌握Swing组件的使用,如JLabel、JTextField、JComboBox等; 学会处理Swing组件的事件,如ActionEve…

    Java 2023年5月19日
    00
  • Maven工程打包jar的多种方式

    下面我来详细讲解一下 Maven 工程打包 jar 的多种方式。 Maven 是一个功能强大的构建工具,可以实现项目的自动化构建、测试和部署等,而制作 Jar 包作为项目的一部分就显得尤为重要了。在使用 Maven 打包 Jar 包时,有多种方式可以选择。 方式一:使用 Maven 插件打包 Maven 提供了一个非常便捷的打包方式,即使用 Maven 的插…

    Java 2023年5月19日
    00
  • Spring基于注解管理bean实现方式讲解

    让我来讲解一下“Spring基于注解管理bean实现方式讲解”的完整攻略。 1. 什么是Spring注解管理Bean Spring注解管理Bean是一种不需要在XML或Java配置文件中手动定义bean实例的管理方式,而是使用注解的方式来进行实例的创建、初始化和依赖注入。相对于传统的XML或Java配置方式,使用注解可以使代码更加简洁,并且可以更加方便地进行…

    Java 2023年5月31日
    00
  • 通过实例了解JavaBean开发及使用过程解析

    当我们在开发Java应用时,经常需要定义一些Java对象来传递数据。这些对象通常被称为JavaBean。JavaBean是符合特定规范的Java类,它通常具有以下特征: 具有公共的无参数构造函数 存取方法遵循JavaBean的规范 实现可序列化接口 在下面的过程中,我将通过两个实例来说明JavaBean的开发及使用过程: 示例1:开发JavaBean pub…

    Java 2023年6月15日
    00
  • Java基础学习之IO流应用案例详解

    Java基础学习之IO流应用案例详解 在Java编程中,输入输出流(IO流)是非常重要的,它是程序中处理文件、网络等数据流的基础。在这里,我们将讲解一些IO流的应用案例,从而更好地理解和掌握Java中的IO流。 一、IO流概念及分类 1.1 IO流简介 IO流指输入/输出流,是Java提供的用于处理数据流的机制。IO流提供了一套函数接口,可方便地进行数据的读…

    Java 2023年5月26日
    00
  • java读取excel文件的两种方法

    下面是详细讲解“Java读取Excel文件的两种方法”的完整攻略: 一、准备工作 在开始读取Excel文件之前,我们需要引入相关的依赖包。这里我们使用Apache POI来读取Excel文件,具体引入方式如下: <dependency> <groupId>org.apache.poi</groupId> <artif…

    Java 2023年5月20日
    00
  • 浅谈SpringMVC中的session用法及细节记录

    下面是关于“浅谈SpringMVC中的session用法及细节记录”的完整攻略,包含两个示例说明。 SpringMVC中的session用法及细节记录 在SpringMVC中,session是一个接口,它用于在服务器端存储和管理用户的状态信息。本文将介绍如何使用session对象来存储和管理用户的状态信息,并提供两个示例说明。 步骤一:创建SpringMVC…

    Java 2023年5月17日
    00
  • Java实现按键精灵的示例代码

    讲解Java实现按键精灵的示例代码的攻略如下: 环境准备 首先需要安装好Java,并安装相应的开发工具,比如Eclipse、IntelliJ IDEA等。同时需要引入按键精灵的Java API,一般情况下直接将其引入到项目中即可。 示例1:模拟键盘输入 按键精灵主要用于模拟用户键盘输入,因此我们首先要实现键盘输入。 在Java中,可以使用Robot类来模拟键…

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