使用maven运行Java Main的三种方法解析

使用maven可以快速地构建Java项目,运行Java Main也是其中的一项基础操作。本文将介绍基于maven运行Java Main的三种方法:使用exec-maven-plugin、使用maven-shade-plugin、使用maven-assembly-plugin。下面我们逐一分析这三种方法:

使用exec-maven-plugin

exec-maven-plugin可以用于在maven构建期间执行任意外部进程,例如运行Java Main。在pom.xml中添加以下插件配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>my-execution</id>
                    <phase>package</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <mainClass>com.example.Main</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

上述配置告诉maven在package阶段,运行Main类中的main方法。需要注意的是,如果main方法需要传递参数,可以通过使用<arguments>标签传递参数。

执行mvn package命令后,可以在target目录下找到打包生成的jar文件。通过执行以下命令,即可在终端中运行Main类的main方法:

java -jar target/my-app.jar

实际使用过程中,可能需要运行多个Main类的main方法,可以对上述插件配置进行扩展,添加多个execution。

使用maven-shade-plugin

maven-shade-plugin用于打包包含所有依赖的可执行jar包。在pom.xml中添加以下插件配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.example.Main</mainClass>
                            </transformer>
                        </transformers>
                        <finalName>my-app</finalName>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

上述配置告诉maven在package阶段,用maven-shade-plugin打包,生成可执行jar包。其中,使用<transformers>标签指定如何转换源jar包。在这个例子中,我们使用ManifestResourceTransformer转换生成的jar包MANIFEST.MF文件中的mainClass属性,指向Main类。打包生成的jar包文件可以在target目录下找到。

执行以下命令,即可在终端中运行Main类的main方法:

java -jar target/my-app.jar

使用maven-assembly-plugin

maven-assembly-plugin用于将项目打包成一组独立的文件。在pom.xml中添加以下插件配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.example.Main</mainClass>
                            </manifest>
                        </archive>
                        <finalName>my-app</finalName>
                        <appendAssemblyId>false</appendAssemblyId>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

上述配置告诉maven在package阶段,生成包含所有依赖的可执行jar包(含有mainClass属性的MANIFEST.MF),并将该jar包与生成的依赖文件打包成一个zip文件。可以在target目录下找到打包生成的zip文件。

执行以下命令,在终端中运行Main类的main方法:

unzip target/my-app.zip
java -cp my-app.jar com.example.Main

或者可以直接使用以下命令来运行打包生成的可执行jar包:

java -jar target/my-app-jar-with-dependencies.jar

这是一个包含所有依赖的可执行jar包,可以在任意机器运行(有Java环境的情况下)。

有关这三种方法的示例可以从以下github仓库中下载:

https://github.com/ZhouYixuanJava/java-exec-demo

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用maven运行Java Main的三种方法解析 - Python技术站

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

相关文章

  • 详解Java中的File文件类以及FileDescriptor文件描述类

    详解Java中的File文件类以及FileDescriptor文件描述类 1. File文件类 1.1 什么是File文件类 Java中的File类用于表示文件或目录的路径名,是访问文件系统中的文件或目录的主要类。通过File类,可以创建、删除、重命名文件或目录,或访问文件或目录的各种属性。 1.2 File类的构造方法 File(String path):…

    Java 2023年5月20日
    00
  • MyBatisPlus之id生成策略的方法

    MyBatisPlus之id生成策略的方法 在使用MyBatisPlus框架进行开发时,我们通常需要为实体类设计主键的生成策略。MyBatisPlus提供了多种主键生成策略,本文将介绍这些策略的用法。 1. 雪花算法策略 雪花算法是Twitter公司开源的一个分布式ID生成算法,可以生成有序的、唯一的64位长整型ID。MyBatisPlus已集成了该算法。 …

    Java 2023年5月19日
    00
  • Java线程重复执行以及操作共享变量的代码示例

    Java线程是一种轻量级进程,可以同时执行多个线程,实现并发操作。有时候我们需要让线程重复执行某个任务,并且需要注意操作共享变量的线程安全问题。下面就是以代码示例的形式,详细讲解“Java线程重复执行以及操作共享变量”的完整攻略。 线程重复执行 线程重复执行的方式有多种,其中最常见的方式是使用循环语句,如while循环、for循环等。下面以while循环和延…

    Java 2023年5月18日
    00
  • feign调用中文参数被encode编译的问题

    当我们使用Feign进行调用时,如果参数中含有中文或其他非ASCII字符,我们会发现这些参数被自动编码了,而且编码方式并不是我们常见的UTF-8,这就需要我们进行一些额外的配置来解决这个问题。 一般情况下,我们需要在Feign配置中添加一个编码器类,用于将参数编码成UTF-8格式,例如: @Configuration public class FeignCo…

    Java 2023年5月20日
    00
  • 快速了解Hibernate中的Session

    关于“快速了解Hibernate中的Session”,我可以给你提供一份完整攻略,具体包含以下内容: 1. 什么是Hibernate的Session? 在Hibernate框架中,Session是对Hibernate和数据库之间的连接的抽象,在Session中进行的所有操作最终都会通过Hibernate去操作数据库。Session可以管理Hibernate中…

    Java 2023年5月19日
    00
  • Java异常处理的12条军规总结

    下面就详细讲解“Java异常处理的12条军规总结”的完整攻略。 Java异常处理的12条军规总结 异常处理的基本原则 不要捕获Throwable类,包括Error和Exception两个子类在内,应该捕获指定的异常类。 不应在finally块中使用return、throw、break和continue等跳转语句。 应根据实际业务需要选择适当的抛出异常类型,并…

    Java 2023年5月27日
    00
  • java Spring 5 新特性函数式Web框架详细介绍

    Java Spring 5 新特性函数式Web框架详细介绍 什么是函数式Web框架? 在Spring 5中,引入了函数式编程范式来创建Web应用程序,这就是函数式Web框架。在传统的Web应用程序中,我们需要使用Controller类和XML文件来定义路由和处理程序,而函数式Web框架允许我们使用函数式编程范式来定义路由和处理程序。 为什么使用函数式Web框…

    Java 2023年5月19日
    00
  • java实现消息队列的两种方式(小结)

    下面是关于“Java实现消息队列的两种方式(小结)”的详细讲解: 1. 引言 消息队列是一种用于传递异步消息的通信方式,常被应用于一些高并发、大规模分布式系统中。Java作为一种广泛应用于企业级应用的编程语言,一定程度上受到了消息队列的青睐。在Java中,开发者可以使用各种规范和框架来实现消息队列,本文将介绍其中常见的两种方式。 2. Java Messag…

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