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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tan_jianhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值