使用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基础知识——JDBC

    详解Java基础知识——JDBC JDBC的介绍 JDBC(Java Database Connectivity)是Java语言中用于操作关系型数据库的API,通过JDBC可以实现Java与数据库之间的交互。JDBC主要包含以下几个部分: DriverManager:驱动管理器,用于管理各种数据库驱动。 Connection:连接对象,用于与数据库建立连接。…

    Java 2023年5月19日
    00
  • SpringMVC数据响应详细介绍

    以下是关于“SpringMVC数据响应详细介绍”的完整攻略,其中包含两个示例。 SpringMVC数据响应详细介绍 在SpringMVC中,我们可以使用多种方式响应数据给客户端。本文将介绍常用的三种方式:ModelAndView、@ResponseBody和HttpServletResponse。 ModelAndView ModelAndView是Spri…

    Java 2023年5月16日
    00
  • SpringBoot中的Thymeleaf模板

    下面是详细讲解“SpringBoot中的Thymeleaf模板”的完整攻略: 什么是Thymeleaf Thymeleaf是一个Java模板引擎,类似于JSP,但比JSP更有优势。它不仅可以用于开发Web应用程序,还可以用于非Web应用程序。Thymeleaf的主要优势是它能够处理HTML,XML,JavaScript,CSS甚至纯文本。 使用Thymele…

    Java 2023年6月15日
    00
  • 利用java监听器实现在线人数统计

    下面是利用Java监听器实现在线人数统计的完整攻略: 1. 创建监听器类 为了监听用户的登录和退出行为,我们需要创建一个实现了ServletContextListener接口的监听器类。这个类中需要实现两个方法:contextInitialized和contextDestroyed,其中contextInitialized方法会在应用启动时被调用,而cont…

    Java 2023年6月15日
    00
  • java与javascript之间json格式数据互转介绍

    首先,JSON是一种轻量级的数据交换格式。Java和JavaScript都支持对JSON格式数据进行互转。Java通过Jackson库提供了对JSON的解析和序列化的支持,而JavaScript通过JSON对象的parse()方法和JSON.stringify()方法实现。 下面是Java将JSON转换为对象的示例: ObjectMapper mapper …

    Java 2023年5月26日
    00
  • JSP技术简介

    JSP技术是运用Java语言的Web编程技术之一,以便于开发人员动态地生成HTML、XML或其他类型的Web页面。在JSP页面中,可以将静态内容、JSP标记和Java代码混合在一起来生成动态Web页面。 JSP页面结构 JSP页面以.jsp后缀作为文件后缀名。在JSP页面中,可以包含以下几种元素: 指令:指示服务器或容器如何翻译JSP页面,并且在整个页面中只…

    Java 2023年6月15日
    00
  • Spring中BeanFactory和ApplicationContext的作用和区别(推荐)

    BeanFactory和ApplicationContext的区别 BeanFactory是Spring Framework中最基础的IOC容器,用于创建和管理应用中的Bean对象,提供对依赖注入(DI)和面向切面编程(AOP)的基本支持。 ApplicationContext是一个高级的IOC容器,它扩展了BeanFactory,并提供了更多的企业级功能,…

    Java 2023年5月19日
    00
  • spring boot项目如何采用war在tomcat容器中运行

    首先,我们需要明确的是,Spring Boot可以作为独立的运行环境,也可以作为传统的Web应用程序打成WAR包在Servlet容器中运行。如果你希望将Spring Boot项目打包成WAR,在Tomcat容器中运行,可以参照下面的步骤: 1. 修改pom.xml 在项目的pom.xml文件中,将打包方式修改为war,如下所示: <packaging&…

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