如何将非Maven构建的Jar依赖添加至Maven项目?
正确将本地Jar包引入Maven项目的方案
你遇到的NoClassDefFoundError是因为<scope>system</scope>的依赖不会被Maven打包插件包含到最终的可执行Jar中,且该scope已被Maven官方废弃,不建议使用。以下是几种规范的解决方案:
方案1:将本地Jar安装到本地Maven仓库(推荐)
这是最符合Maven规范的方式,依赖会和其他Maven库依赖一样被管理:
- 执行以下Maven命令,将本地Jar安装到本地仓库(替换
/path/to/AmongUs.jar为你的Jar实际路径):
mvn install:install-file -Dfile=/path/to/AmongUs.jar -DgroupId=org.plegeus -DartifactId=AmongUs -Dversion=1.0 -Dpackaging=jar
- 修改pom.xml中的依赖配置,移除
scope和systemPath,使用标准依赖格式:
<dependency> <groupId>org.plegeus</groupId> <artifactId>AmongUs</artifactId> <version>1.0</version> </dependency>
这样Maven会自动从本地仓库读取依赖,打包时也会正确将其包含到构建产物中。
方案2:通过Maven插件复制并打包本地Jar
如果不想将Jar安装到本地仓库,可通过maven-dependency-plugin将本地Jar复制到项目构建目录,并配置maven-jar-plugin在打包时包含该依赖:
- 在pom.xml的
<build>节点下添加插件配置:
<build> <plugins> <!-- 复制本地Jar到构建目录的lib文件夹 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-local-dependency</id> <phase>process-resources</phase> <goals> <goal>copy</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <artifactItems> <artifactItem> <groupId>org.plegeus</groupId> <artifactId>AmongUs</artifactId> <version>1.0</version> <type>jar</type> <systemPath>${project.basedir}/deps/AmongUs.jar</systemPath> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> <!-- 配置可执行Jar的类路径,包含lib目录下的依赖 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.yourpackage.MainClass</mainClass> <!-- 替换为你的主类全限定名 --> </manifest> </archive> </configuration> </plugin> </plugins> </build>
- 保留原依赖配置(可移除
<scope>system</scope>,插件会通过systemPath找到本地Jar)。
关于groupId、artifactId的说明
你自定义的groupId、artifactId和version只要在配置中保持一致就有效,没有强制要求和Jar内的包名对应,但建议和Jar的实际包结构或项目名称保持一致,方便后续维护。
内容的提问来源于stack exchange,提问作者Plegeus
相关产品推荐
相关产品推荐

