当前位置: 首页 > news >正文

java -jar 执行基于Maven构建的Java应用的方法总结

一、Maven pom.xml文件未指定主类的情况

1、用Maven打包

mvn clean package -DskipTests

2、用java命令执行jar包

java -cp maven-allin-mainclass-demo-1.0-SNAPSHOT.jar org.example.Main

二、Maven pom.xml文件指定主类的情况

1、pom.xml文件指定主类,有两种方式:

(1)使用 maven-shade-plugin插件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <!-- 指定主类 -->
                                <mainClass>org.example.Main</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

(2)使用 maven-jar-plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <!-- 指定主类 -->
                        <mainClass>org.example.Main</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

(3)两种方式的小结

maven-shade-plugin:适用于创建包含所有依赖项的可执行 JAR 文件。

maven-jar-plugin:适用于创建标准的 JAR 文件,需要手动处理依赖项。

可以依据项目的实际需求选择合适的插件。配置完成后,运行 mvn package 命令打包项目,之后就能够使用 java -jar 命令运行生成的 JAR 文件了。

2、用Maven打包

mvn clean package -DskipTests

3、用java命令执行jar包

java -jar maven-allin-mainclass-demo-1.0-SNAPSHOT.jar

三、使用三方组件依赖,将依赖的Jar包打入到应用的Jar包中

1、pom.xml文件指定主类,有两种方式:

(1)使用 maven-shade-plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <!-- 指定主类 -->
                                <mainClass>org.example.Main</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

(2)使用 maven-assembly-plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <!-- 指定主类 -->
                        <mainClass>org.example.Main</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>

(3)两种方式的小结

maven-shade-plugin:适用于创建包含所有依赖项的可执行 JAR 文件,可对资源和类进行转换。

maven-assembly-plugin:适用于创建包含依赖项的 JAR 文件,支持多种打包格式,配置相对简单。

你可以根据项目的实际需求选择合适的插件。配置完成后,运行 mvn package 命令打包项目,即可生成包含依赖项的 JAR 文件。

2、用Maven打包

mvn clean package -DskipTests

3、用java命令执行jar包

# 用maven-shade-plugin插件构建,则执行: java -jar maven-allin-mainclass-demo-1.0-SNAPSHOT.jar # 用maven-assembly-plugin插件构建,则执行: java -jar maven-allin-mainclass-demo-1.0-SNAPSHOT-jar-with-dependencies.jar

四、总结

1、使用Maven以及其他类似的工具,帮我们省去了很多琐碎的操作,如:用javac编译每一个java文件、将所有java类文件与其他资源文件打包成Jar文件等

2、在上文中提及的构建与执行Java应用可分为:不使用Maven插件和使用Maven插件的两种情况。

3、使用Maven插件的情况,用了三种Maven插件:maven-shade-plugin、maven-jar-plugin、maven-assembly-plugin。这三种插件在功能上有一些差别:

Maven插件

指定主类

将依赖的Jar一起打包

生成的Jar文件

maven-shade-plugin

maven-allin-mainclass-demo-1.0-SNAPSHOT-jar-with-dependencies.jar -- 含依赖的Jar文件内容

maven-allin-mainclass-demo-1.0-SNAPSHOT.jar -- 不含依赖的Jar文件内容

maven-jar-plugin

maven-allin-mainclass-demo-1.0-SNAPSHOT.jar -- 不含依赖的Jar文件内容

maven-assembly-plugin

maven-allin-mainclass-demo-1.0-SNAPSHOT.jar -- 含依赖的Jar文件内容

original-maven-allin-mainclass-demo-1.0-SNAPSHOT.jar -- 不含依赖的Jar文件内容

五、示例代码

示例代码已上传到GITHUB和GITEE:

https://github.com/tanjianhui/maven-allin-mainclass-demo

https://gitee.com/tanjianhui/maven-allin-mainclass-demo

相关文章:

  • 剑指 Offer II 087. 复原 IP
  • RustDesk自建远程桌面服务教程
  • Vue与Django是如何传递参数的?
  • matlab 谐波分析公式绘图
  • C语言:基于链表实现栈
  • java多线程基础
  • 深入解析 Vue 3 Teleport:原理、应用与最佳实践
  • MySQL基本语句以及表约束练习
  • 单口路由器多拨号ADSL实现方法
  • Flutter小白开发笔记
  • 自动化测试框架学习总结-hytest学习
  • OpenEuler20.3 安装 Elasticsearch7.17
  • 关于新奇的css
  • IDEA:项目结构不见了,项目文件消失解决
  • FastDVDnet:不需要显示学习运动的实时视频降噪
  • AI编写自动化测试脚本
  • 淘宝API vs 爬虫:合规获取实时商品数据的成本与效率对比
  • 对比文章相似度的余弦相似度算法的原理
  • Redis持久化深度解析:RDB与AOF双剑合璧
  • 【已解决】docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: request c
  • 王毅谈中拉论坛第四届部长级会议重要共识
  • 刘永明|在从普及到提高中发展新大众文艺
  • 再获殊荣!IP SH跻身上海文化品牌全球传播力TOP 6
  • 从采购到销售!市场监管总局指导行业协会防控肉品风险
  • 撤制镇如何突破困境?欢迎订阅《澎湃城市报告》第23期
  • 5年建成强化城市核心功能新引擎,上海北外滩“风景文化都是顶流”