Java Maven force项目的构建顺序
我有一个多模块的项目如下Java Maven force项目的构建顺序,java,maven,Java,Maven,我有一个多模块的项目如下 母公司 孩子1 孩子2 孩子3 整合 集成项目(pax考试测试)引用了Child1和Child2,因此重铸顺序为: 孩子1 孩子2 整合 孩子3 但需要在运行时安装Child3(osgi捆绑包),并且由于尚未安装Child3而失败 如果我在父pom的my’s部分中最后指定了集成项目,那么一切都会正常工作,但一旦添加了新项目,它就会被追加到该部分的最后一个,并且会再次失败 是否存在强制最后建造/安装一个项目的情况,即在此确定的覆盖反应堆顺序 我试过failsa
- 母公司
- 孩子1
- 孩子2
- 孩子3
- 整合
- 孩子1
- 孩子2
- 整合
- 孩子3
依赖关系已经通过从pax考试加载的features.xml文件处理。项目之间的依赖关系应该在POM的依赖关系部分中处理 如果只在运行时而不是编译时需要依赖项,那么添加
<scope>runtime</scope>
运行时
添加到依赖项声明
我建议将Child3添加到集成依赖项中(我建议提供范围-这意味着包括在编译时,但不包括在运行时)。此外,如果您不希望在集成的可传递依赖项中包含Child3,则可以添加可选标记。以下是一个例子:
<dependencies>
<dependency>
<groupId>someGroupId</groupId>
<artifactId>Child3</artifactId>
<version>someVersion</version>
<scope>provided</scope>
<optional>true</optional>
</dependency>
</dependencies>
someGroupId
孩子3
某个版本
假如
真的
您可以尝试在集成项目中添加一个对Child3的依赖项,该依赖项的作用域为“提供”,这可能会触发正确的构建顺序。是的,会的,但我可以将集成测试移到父pom的模块部分。我不想每次添加新项目时都更改项目。Hmmmm。好吧,如果项目之间存在依赖关系,那么应该在POM文件中说明。即使每次添加项目时都需要工作。@Duncan我认为在这种情况下,范围应该是“运行时”而不是“提供的”。@Puce也许吧。我不确定OSGi在Maven眼中是否被视为一个容器,因此“提供”的意思是正确的:“您期望JDK或容器在运行时提供依赖关系”。提供是错误的。显然,没有编译时依赖关系,或者项目甚至不会编译。运行时是正确的,依赖关系只在执行期间需要(这意味着在本例中的集成测试)。在这种情况下,您也可以选择“测试”。@blackbuild是的,没错。但我相信这两种解决方案都会奏效,因为问题在于反应堆的顺序。我说得对吗?不过我承认,你的描述更具描述性。是的,两者都会起作用。然而,您的pom会“撒谎”其依赖性。我总是建议写POM,先声明意图,后声明效果。但是每次添加新项目时,我都需要添加依赖项。如果我只能在最后安装集成模块,那么就不需要在pom中指定依赖项。@Marcus是的,没错。依赖性是Maven反应堆排序中最强的规则。也许有一些第三方构建扩展可以帮助您,但我还没有听说过。您可以在以下位置找到更多信息: