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日

相关文章

  • 什么是并发编程?

    以下是关于什么是并发编程的完整使用攻略: 什么是并发编程? 并发编程是指在多核处理器上,多个线程同时执行不同的任务,从而提高程序的执行效率。在并发编程中,需要考虑多个线程之间的协作和同步,以避免出现数据不一致或者数据污染的问题。 为了实现并发编程,可以采取以下措施: 1. 使用多线程 多线程是实现并发编程的基础,通过多线程可以让多个任务同时执行,从而提高程序…

    Java 2023年5月12日
    00
  • MyEclipse怎么设置性能才能达到最佳?

    MyEclipse是一款集成开发环境(IDE),使用该IDE能够为Java开发提供有效的工具和特性。MyEclipse有许多内置功能和选项,可以调整各种配置以提高性能和效率。以下是设置MyEclipse性能的攻略: 1. 显式地配置JVM MyEclipse是基于Java开发的IDE,其虚拟机运行在Java虚拟机上(JVM)。了解和调整JVM设置是提高性能的…

    Java 2023年5月20日
    00
  • Java Http接口加签、验签操作方法

    关于Java Http接口加签、验签操作方法的完整攻略,可以分为以下几个部分: 什么是接口加签、验签? 在网络通信中,为了防止数据伪造、篡改等安全问题,需要使用加密、签名等方式来保护数据安全。接口加签、验签是其中的一种方式。简单来说,就是在数据通信的过程中,在数据中加入签名信息,用于识别数据的真实性。接口加签指的是计算签名,并将签名在请求头或请求参数中传输。…

    Java 2023年5月26日
    00
  • 教你使用Java获取当前时间戳的详细代码

    下面是使用Java获取当前时间戳的详细攻略,包含了两个示例。 获取当前时间戳的意义 获取当前时间戳可以在实际开发中应用到很多场景,如: 用于记录日志,记录操作时间 用于计算时间差,比如计算程序执行时间 用于生成唯一ID,保证ID的唯一性 等等 代码实现 Java中可以使用System.currentTimeMillis()方法获取当前系统时间的时间戳,这个方…

    Java 2023年5月20日
    00
  • 通过url方式传递中文乱码的解决方法

    当我们在URL中传递中文时,由于URL只能传输ASCII码,因此中文需要经过特定的编码方式转化为符合URL传输的ASCII码(比如UTF-8编码),而这个过程容易造成中文乱码的问题。下面介绍两种解决乱码的方式: 一、使用url编码 URL编码是一种将某些字符转换为%XX(XX为16进制)格式的编码方式,在不同语言的处理方式中可能有所不同。在JavaScrip…

    Java 2023年5月20日
    00
  • SpringSecurity页面授权与登录验证实现(内存取值与数据库取值)

    下面我将详细讲解“SpringSecurity页面授权与登录验证实现(内存取值与数据库取值)”的完整攻略。 一、概述 在开发Web应用程序时,安全性一直是非常重要的一环。Spring Security是Spring Framework所提供的一个强大的安全性框架,能够帮助我们很容易实现认证和授权功能。本文将介绍SpringSecurity页面授权与登录验证实…

    Java 2023年5月19日
    00
  • Java实现非阻塞式服务器的示例代码

    实现非阻塞式服务器可以提高服务器的并发处理能力。下面是一个Java实现非阻塞式服务器的示例代码的攻略。 1. 了解非阻塞式服务器 非阻塞式服务器是指服务器可以在不影响其他请求的情况下,同时处理多个连接请求。在实现非阻塞式服务器时,可以使用Java NIO(New I/O)框架提供的非阻塞I/O机制。与传统的阻塞I/O不同,非阻塞I/O中的请求不必在服务器完全…

    Java 2023年6月1日
    00
  • Java中进程与线程的区别

    Java中进程与线程的区别 在Java中,进程(Process)和线程(Thread)都是常见的概念。虽然它们的功能类似,但它们之间存在明显的不同。了解它们的区别对我们正确地设计和编写多线程程序非常重要。 进程和线程的定义 进程是操作系统操作的基本单位,它是程序执行时的一个实例。它拥有自己的内存空间、系统资源和进程上下文等。每个进程都有一个或多个线程,线程是…

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