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

Maven构建Jersey项目时遇java.lang.ClassNotFoundException求助

解决Maven system依赖导致的ClassNotFoundException问题

我来帮你搞定这个问题——你遇到的ClassNotFoundException本质是因为Maven的system scope依赖默认不会被exec:java任务包含到运行时的classpath里,尤其是在执行命令行运行的时候。下面给你几个实用的解决办法,按推荐程度排序:

1. 把外部JAR安装到本地Maven仓库(最推荐)

system scope其实是Maven不建议使用的依赖方式,它会让项目的可移植性变差——其他开发者拿到项目后还得手动把abc.jar放到指定路径才能构建。更靠谱的做法是把这个JAR安装到你的本地Maven仓库:

打开终端,切换到项目根目录,运行这条命令:

mvn install:install-file -Dfile=${project.basedir}/libs/abc.jar -DgroupId=com.x -DartifactId=y.z -Dversion=1 -Dpackaging=jar

然后修改pom.xml里的依赖配置,去掉system相关的内容,改成普通的compile scope依赖:

<dependency>
    <groupId>com.x</groupId>
    <artifactId>y.z</artifactId>
    <version>1</version>
</dependency>

这样Maven会自动把这个依赖加入到编译和运行的classpath里,不用再额外配置exec插件,项目也更容易共享给其他人。

2. 配置exec插件,显式包含system依赖

如果你暂时不想改动依赖的引入方式,那可以调整exec-maven-plugin的配置,让它把system scope的依赖加入到运行时classpath中。在pom.xml的<build>节点下添加如下插件配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.1.0</version> <!-- 建议用最新的稳定版本 -->
            <configuration>
                <includeScope>system</includeScope> <!-- 关键:让插件包含system依赖 -->
                <mainClass>你的主类全限定名</mainClass> <!-- 替换成你实际的main类路径 -->
            </configuration>
        </plugin>
    </plugins>
</build>

配置完成后,重新运行mvn -X exec:java,应该就能找到com.x.y.z.MyException类了。

3. 检查systemPath的正确性(排查基础问题)

如果上面两种方法都没解决,先确认你的system路径配置有没有问题:

  • 检查项目根目录下的libs文件夹是否存在,且abc.jar确实在里面
  • 可以尝试把systemPath改成绝对路径测试,比如/Users/xxx/your-project/libs/abc.jar,排除变量解析的问题
  • 用jar tf ${project.basedir}/libs/abc.jar命令查看JAR内部,确认com/x/y/z/MyException.class文件确实存在

小提示

system scope一般只用于JDK自带的系统级JAR,对于自定义的外部依赖,优先选择安装到本地仓库或者搭建私有Maven仓库(比如Nexus),能避免很多classpath相关的坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:36:15