You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven打包可执行Jar报错:无法初始化主类,如何修复?

问题原因

你用maven-jar-plugin生成的Jar包仅包含项目自身的编译代码,未打包依赖的第三方库(比如selenium-java),运行时JVM找不到这些依赖类,因此抛出NoClassDefFoundError。而Eclipse导出的可执行Jar默认会将依赖包一并打包,所以能正常运行。

解决方案

以下两种方法均可生成包含所有依赖的可执行Jar:

方法一:使用maven-assembly-plugin

在pom.xml的<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>main.MyClass</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

执行Maven命令打包:

mvn clean package

打包完成后,target目录会生成两个Jar:

  • 原myprojectname-0.1.0-SNAPSHOT.jar(仅含自身代码)
  • myprojectname-0.1.0-SNAPSHOT-jar-with-dependencies.jar(包含所有依赖,可直接运行)

运行带依赖的Jar:

java -jar myprojectname-0.1.0-SNAPSHOT-jar-with-dependencies.jar

方法二:使用maven-shade-plugin(更灵活,适合复杂项目)

在pom.xml的<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>main.MyClass</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

执行Maven命令打包:

mvn clean package

此时target目录下的myprojectname-0.1.0-SNAPSHOT.jar即为包含所有依赖的可执行Jar,直接运行即可:

java -jar myprojectname-0.1.0-SNAPSHOT.jar

注:你之前在maven-jar-plugin中配置的<addClasspath>true</addClasspath>仅会在Manifest中添加依赖路径,并不会自动打包依赖包,需手动将依赖包放到指定路径(如Jar同目录的lib文件夹),这种方式不如上述两种方法便捷。

内容的提问来源于stack exchange,提问作者rozerro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:27:44