Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven force项目的构建顺序_Java_Maven - Fatal编程技术网

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
    • 整合
集成项目(pax考试测试)引用了Child1和Child2,因此重铸顺序为:

  • 孩子1
  • 孩子2
  • 整合
  • 孩子3
但需要在运行时安装Child3(osgi捆绑包),并且由于尚未安装Child3而失败

如果我在父pom的my’s部分中最后指定了集成项目,那么一切都会正常工作,但一旦添加了新项目,它就会被追加到该部分的最后一个,并且会再次失败

是否存在强制最后建造/安装一个项目的情况,即在此确定的覆盖反应堆顺序

我试过failsafe插件,但它似乎只在当前项目中的单元测试之后运行集成测试,而不是整个堆栈

谢谢

更新:

我不想每次添加新的子项目时都向集成项目添加依赖项,只是为了让集成项目最后安装。这样就更容易记住将集成模块移到父pom模块部分列表中的最后一个


依赖关系已经通过从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反应堆排序中最强的规则。也许有一些第三方构建扩展可以帮助您,但我还没有听说过。您可以在以下位置找到更多信息: