Java Maven没有';运行mvn dependency:tree时无法识别同级模块
我正在尝试设置一个多模块Maven项目,而模块间的依赖关系显然没有正确设置 我有:Java Maven没有';运行mvn dependency:tree时无法识别同级模块,java,maven,maven-2,dependencies,Java,Maven,Maven 2,Dependencies,我正在尝试设置一个多模块Maven项目,而模块间的依赖关系显然没有正确设置 我有: 平民 存储 在父POM中(具有包装类型POM) 然后是子目录commons/和storage/,它们定义了具有相同名称的JAR POM 存储依赖于公共空间 在主(主)目录中,我运行mvn dependency:tree并查看: [INFO]建筑系统 [信息]任务段:[依赖项:树] [信息]-------------------------------------------------------------
平民
存储
在父POM中(具有包装类型POM)
然后是子目录commons/
和storage/
,它们定义了具有相同名称的JAR POM
存储依赖于公共空间
在主(主)目录中,我运行mvn dependency:tree
并查看:
[INFO]建筑系统
[信息]任务段:[依赖项:树]
[信息]------------------------------------------------------------------------
[信息][依赖项:树{执行:默认cli}]
[信息]域:系统:pom:1.0-快照
[INFO]\-junit:junit:jar:3.8.1:test
[信息]------------------------------------------------------------------------
[信息]公共建筑
[信息]任务段:[依赖项:树]
[信息]------------------------------------------------------------------------
[信息][依赖项:树{执行:默认cli}]
…正确的树。。。
[信息]------------------------------------------------------------------------
[信息]楼宇存储
[信息]任务段:[依赖项:树]
[信息]------------------------------------------------------------------------
下载:http://my.repo/artifactory/repo/domain/commons/1.0-SNAPSHOT/commons-1.0-SNAPSHOT.jar
[信息]在存储库my.repo中找不到资源“域:commons:jar:1.0-SNAPSHOT”(http://my.repo/artifactory/repo)
[信息]------------------------------------------------------------------------
[错误]生成错误
[信息]------------------------------------------------------------------------
[信息]无法解析工件。
缺失:
----------
1) 域:commons:jar:1.0-SNAPSHOT
为什么对“commons”的依赖失败了,尽管反应堆显然已经看到了它,因为它成功地处理了它的依赖树?它绝对不应该在网上找到它,因为它就在那里
用于存储的pom:
4.0.0
罐子
系统
领域
1.0-快照
领域
存储
存储
http://maven.apache.org
领域
平民
1.0-快照
朱尼特
朱尼特
3.8.1
测试
谢谢你的建议
(编辑)
为了澄清,我在这里寻找的是:我不希望必须安装模块X来构建依赖于X的模块Y,因为这两个模块都是从同一父POM引用的模块。这对我来说很直观,如果我在同一个源代码树中有两个东西,我就不必安装中间产品来继续构建。希望我的想法在这里有一定的意义…我认为问题在于,当您指定依赖项时,Maven希望将其打包为jar(或其他任何形式),并至少从本地回购中获得。我确信,如果您首先在commons项目上运行
mvn install
,一切都会正常工作 如中所述,dependency:tree目标本身将在存储库而不是反应器中查找内容。您可以按照前面的建议,通过安装mvn来解决这个问题,或者执行一些调用reactor的不那么繁重的操作,例如
mvn compile dependency:tree
对我来说很有用。意识到这是一个较旧的线程,但似乎要么是工具进化出来的,要么是第一次错过了 可以通过反应堆构建来执行一个构建,使依赖关系得到解决,而无需安装 如果在描述项目模块结构的父级中启动构建,那么模块之间的依赖关系将在构建过程中通过内部Maven reactor得到解决 当然,这不是一个完美的解决方案,因为它不能解决结构中单个模块的构建问题。在这种情况下,Maven的reactor中不会有依赖项,而是希望在存储库中解决它。因此,对于单个构建,您仍然必须首先安装依赖项
下面是一些关于这种情况的描述。对于我来说,导致我出现这个线程的是一个类似的问题,解决方案是确保所有模块依赖性pom都有
<packaging>pom</packaging>
pom
父母有
聚甲醛
我的dep型号有pom,所以找不到罐子。唯一适合我的是:切换到gradle:( 我有
Parent
+---dep1
+---war1 (using dep1)
我可以在war1中使用cd,并使用mvn tomcat7:运行war。
我以前总是要安装整个项目,尽管war1引用了他的父项目,父项目引用了war1和dep1(作为模块),所以所有依赖项都应该是已知的
我不明白问题是什么。确保在pom中解决了出现故障的模块,并通过在模块的pom文件中包含配置来指向正确的父级。在Maven模块结构中,如下所示:
- parent
- child1
- child2
您将在父项pom
中包含以下内容:
<modules>
<module>child1</module>
<module>child2</module>
</modules>
您将收到一个错误,无法找到child1
的JAR。这可以通过在pom
中声明child1
的块来解决:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>example</groupId>
<artifactId>child1</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
例子
孩子1
${project.version}
child1
现在将在您运行compile
或package
等时生成。在parent
上的目标和child2
将找到child1
的编译文件。使用from:
如果您的构建创建了测试jar,以便在反应堆子模块之间共享测试代码,您应该使用:
mvn test-compile dependency:tree
在这种情况下,这将允许dependency:tree
运行到完成。是否有办法指定我希望它使用源代码树中模块的任何版本?我认为这种情况将自动处理
mvn test-compile dependency:tree