Eclipse导入Maven项目后pom.xml的systemPath配置报错原因求解
报错原因
- 第一个报错的本质是Maven
system作用域的设计限制:system依赖初衷是用于引用本地系统中不在Maven仓库托管的公共类库(如JDK自带的tools.jar),而非项目内部的自定义jar。当其他项目依赖你当前这个项目时,依赖解析过程中${basedir}会指向依赖方项目的根目录,而非当前pom所在的项目目录,必然找不到MyDBConn.jar,所以Maven规则直接禁止systemPath指向项目内部路径。 - 第二个报错是Eclipse自带的Maven插件(m2e)的静态校验规则导致的:虽然
${basedir}在Maven执行阶段会被解析为pom所在目录的绝对路径,但m2e的静态校验不会提前解析变量,会直接把${basedir}/dependencies/MyDBConn.jar识别为相对路径,因此触发「必须指定绝对路径」的报错。
推荐解决方案
方案1:将jar安装到本地Maven仓库(最规范)
执行如下Maven命令把自定义jar安装到本地仓库:
mvn install:install-file -Dfile=${basedir}/dependencies/MyDBConn.jar -DgroupId=com.myApp -DartifactId=MyDBConn -Dversion=0.0.0 -Dpackaging=jar
之后修改pom中的依赖配置,删除scope和systemPath配置即可:
<dependency> <groupId>com.myApp</groupId> <artifactId>MyDBConn</artifactId> <version>0.0.0</version> </dependency>
方案2:项目内置本地仓库(适合多成员协作不需要每人手动安装jar)
- 在项目根目录新建
repo文件夹作为项目内置的Maven仓库 - 执行如下命令把jar安装到该内置仓库:
mvn install:install-file -Dfile=${basedir}/dependencies/MyDBConn.jar -DgroupId=com.myApp -DartifactId=MyDBConn -Dversion=0.0.0 -Dpackaging=jar -DlocalRepositoryPath=${basedir}/repo
- 在pom的
repositories节点下新增内置仓库配置:
<repository> <id>project-local-repo</id> <url>file://${project.basedir}/repo</url> </repository>
- 依赖配置和方案1一致,删除
scope和systemPath即可。
方案3:临时规避校验(不推荐,仅做本地测试用)
如果非要保留system scope,可把systemPath改为绝对路径,或在Eclipse的Maven校验设置中关闭systemPath规则校验,但该配置仅本地生效,项目移植到其他环境依然会出现问题。
内容的提问来源于stack exchange,提问作者Hari Krishnan
相关产品推荐
相关产品推荐

