我有 3 个 maven 项目:第一个 - 带有包装罐的“A”,第二个 -“B”包装罐,第三个 -“C”包装罐。“C”依赖于“B”作为编译时依赖,“B”依赖于“A”也作为编译时依赖。项目“C”也使用“A”中的类。所以我有传递依赖C - > B - > A。但是当我尝试构建这些项目时,maven在编译项目C时因编译错误而失败:它无法从项目“A”中找到“C”中使用的类。
我认为maven解决了传递依赖。为什么我会收到这样的错误?
我有 3 个 maven 项目:第一个 - 带有包装罐的“A”,第二个 -“B”包装罐,第三个 -“C”包装罐。“C”依赖于“B”作为编译时依赖,“B”依赖于“A”也作为编译时依赖。项目“C”也使用“A”中的类。所以我有传递依赖C - > B - > A。但是当我尝试构建这些项目时,maven在编译项目C时因编译错误而失败:它无法从项目“A”中找到“C”中使用的类。
我认为maven解决了传递依赖。为什么我会收到这样的错误?
Maven解决了传递依赖,但不会(通常)自动为您构建它们。--also-make/-am
您可以通过提供标志以及项目列表来让 maven 做您想做的事情:
mvn -am -pl C clean install
这假定 A、B、C 都是共享父级的所有模块,并且您将在父级目录中运行上述命令。
Maven中传递依赖失败的原因有很多。您需要为此启用调试选项。我遇到了类似的问题。我正在使用日食。在 Eclipse 中启用 maven 的调试选项:Windows->Preference->Maven->Tick mark Debug Output
我的项目中的错误是:
[WARNING] The POM for mil-pop2:java-json:jar:1.0 is invalid, transitive dependencies (if any) will not be available: 4 problems were encountered while building the effective model for mil-pop2:java-json:1.0
[ERROR] 'dependencies.dependency.systemPath' for java-json.jar:java-json.jar:jar must specify an absolute path but is ${project.basedir}/src/main/resources/lib/java-json.jar @
传递依赖失败的原因是我们所依赖的项目从自定义路径而不是本地存储库继承了jar。如果您提供了自定义路径,请删除。
前 :
<dependency>
<groupId>java-json</groupId>
<artifactId>java-json.jar</artifactId>
<version>1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/java-json.jar</systemPath>
</dependency>
后:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
这解决了我的错误。