Maven 打包后,运行jar 包报错Jar中没有主清单属性

背景

    服务器重新拉了个环境,IDEA创建了一个demo打包Jar包测试。结果运行Jar包报错:No main manifest attribute, in xxx.jar,没有主清单属性。

 刚开始略有诧异,简单demo还能报错?初始打包配置如下。

初始pom配置

<build>
        <!--修改编译出来的jar包名,仅为{artifactId}.jar-->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.example.inittestdemo.InitTestDemoApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

原因

    查看pom文件,我在demo中使用了 spring-boot-maven-plugin 来打包 Spring Boot 应用,并且在 configuration 部分设置了 <skip>true</skip>

    这个设置实际上会导致 spring-boot-maven-pluginrepackage 目标被跳过,因此不会生成可执行的 jar,也就是说,不会创建包含主清单属性的 JAR 文件。

    Spring Boot JAR 文件的主要特点是它包含了一个 META-INF/MANIFEST.MF 文件,它有一个 Start-Class 属性,用来指示运行 JAR 时要调用的主类。但是,因为我默认设置了 <skip>true</skip>,所以 repackage 目标不会执行,相应的主清单属性也就不会被添加到 JAR 文件中。导致jar包运行失败。

    要解决这个问题,只需要移除 <skip>true</skip> 配置,以便让 spring-boot-maven-pluginrepackage 目标可以执行并创建正确的可执行 JAR 文件。重新打包运行,一切OK,没有问题。

结果

修改后的pom配置文件:

  <build>
        <!--修改编译出来的jar包名,仅为{artifactId}.jar-->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.example.inittestdemo.InitTestDemoApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值