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

Maven打包Jar含Class-Path仍无法解析依赖类问题

解决Maven打包后运行Jar抛出NoClassDefFoundError的问题

问题原因

你当前采用依赖与代码分离的打包方式:自身代码打包为donkey-1.0.jar,第三方依赖通过maven-dependency-plugin复制到target/lib目录,maven-jar-plugin在MANIFEST.MF中添加了Class-Path条目指向这些依赖。但运行时找不到org.neo4j.driver.AuthTokens类,大概率是以下原因:

  • 运行命令的目录不是Jar所在的target目录,导致JVM无法根据相对路径找到lib下的依赖
  • maven-dependency-plugin配置有误,未将依赖正确复制到target/lib
  • maven-jar-plugin的classpathPrefix配置错误,导致Class-Path路径与实际依赖位置不匹配

解决方案

方案一:修复分离依赖的运行与配置

  1. 在正确目录下运行Jar
    切换到Jar所在的target目录再执行命令:

    cd target
    java -jar donkey-1.0.jar
    
  2. 检查并修正maven-dependency-plugin配置
    确保插件在package阶段将依赖复制到target/lib:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-dependencies</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    <overWriteIfNewer>true</overWriteIfNewer>
                </configuration>
            </execution>
        </executions>
    </plugin>
    
  3. 修正maven-jar-plugin的Class-Path前缀
    必须指定classpathPrefix为lib/,保证MANIFEST.MF中的依赖路径与target/lib对应:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <classpathPrefix>lib/</classpathPrefix>
                    <mainClass>你的主类全限定名</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>
    

方案二:打包可执行Fat Jar(推荐)

分离依赖的方式容易出现路径问题,更稳妥的是用maven-shade-plugin将所有依赖打包到同一个Jar中:

  1. 添加shade插件配置
    在pom.xml的<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>你的主类全限定名</mainClass>
                        </transformer>
                    </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>
    
  2. 打包并运行
    执行mvn clean install后,target目录会生成带-shaded后缀的Jar(或覆盖原Jar),直接运行即可:

    java -jar target/donkey-1.0-shaded.jar
    

额外检查点

确认pom.xml中已正确引入neo4j-java-driver依赖,且scope为compile(默认无需手动指定):

<dependency>
    <groupId>org.neo4j.driver</groupId>
    <artifactId>neo4j-java-driver</artifactId>
    <version>你的依赖版本号</version>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:45:35