maven项目可以运行但是打包后执行报错

背景

一直依赖做的maven项目几乎都是spring项目,无脑导入个spring-boot-maven-plugin就能打包到处跑了。最近做了一个java脚本程序,懒得找包一个个导入library了,直接使用了maven工程,编译运行都没问题,打包后执行报错提示:java.lang.NoClassDefFoundError
在这里插入图片描述

问题分析

根据上面的报错原因,是找不到我导入的maven的依赖,我很确定我在dependencies中是有导入了的,不然我开发的时候怎么执行的呢。那它还是找不到的原因,只可能是打包的时候真的没有把依赖的文件打包进去

我们来求证一下这个推理,找到打好的包,使用压缩文件工具打开检查文件
在这里插入图片描述

真的除了我代码中的文件,maven依赖的包它是一个都没给我放进去,难怪会找不到文件呢

解决方案

导入maven插件工具shade即可解决该问题,在开发工具中,下面的goals -> goal中的shade会变红色,我也不知道为什么,但是我可以很确定告诉你,就是这么配置的。

还需要注意的是,这个插件与maven-jar-plugin是要共存的,否则会无法打包。而且如果执行的时候提示没有主清单属性,则需要在maven-jar-plugin中补充mainClass属性。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.example.YourMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.3.0</version> <!-- 使用最新版本 -->
            <configuration>
                <createDependencyReducedPom>false</createDependencyReducedPom>
                <shadedArtifactAttached>true</shadedArtifactAttached>
                <shadedClassifierName>jar-with-dependencies</shadedClassifierName>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

加了这段配置之后,打包会生成两个 jar包,其中后缀为jar-with-dependencies就是你要拿去执行的包。

或者使用maven-assembly-plugin也可以,不过这个通常会在线上拉包,我个人不太喜欢,不过也给出示范了

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version> <!-- 使用最新版本 -->
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>your.main.Class</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值