2015-06-05 28 views
2

根据the docs,maven-invoker-plugin是“线程安全的并支持并行构建”。然而,当我与-T 1C建立由多模块项目中,我得到这样一个错误如下:maven-invoker-plugin并行构建“伪像未完全组装”错误

[错误]未能执行目标org.apache.maven.plugins:Maven的调用,插件:1.10:在项目上安装(集成测试)my-archetype:无法安装项目依赖项:MavenProject:com.tavianator:my-archetype:1.6-SNAPSHOT @ /home/tavianator/code/Project/my-archetype/pom.xml:Failed安装项目工件:MavenProject:com.tavianator:my-project:1.6-SNAPSHOT @ /home/tavianator/code/Project/my-project/pom.xml:未能安装工件:com.tavianator:my-project:jar :1.6-SNAPSHOT:工件未完全拼装:/ home/tavianator/code/Project/my-project/target/classes - > [Help 1]

项目布局是这样的:

Root 
|--Project 1 
|--Project 2 
|--Archetype (depends on Project 1, scope=test) 

原型集成测试使用maven-调用,插件相关的依赖(根和项目1)安装到本地存储库中,然后运行正常原型整合试验。在并行构建中,Archetype和Project 2同时运行。当maven-invoker-plugin运行时,它会尝试将Project 2安装到本地repo,但是Project 2尚未构建,因此出现错误。

但是因为项目2甚至不需要测试,所以我应该能够通过显式安装所需的依赖关系来解决问题。我不明白如何让调用者插件来做到这一点,但是我可以使用另一个插件吗?

我报告了maven-invoker-plugin bug here。我有一个演示错误here的示例项目。

+0

我有点困惑。您是否在尝试对原型进行集成测试?你能显示完整的pom文件吗?除了你在哪里定义了maven-invoker-plugin? – khmarbaise

+0

是的,我正在尝试为原型做一个集成测试。但生成的项目依赖于“Project 1”,所以我必须将其安装在本地repo中,否则将不会被找到。我会尝试制作一个独立的复制器并发布它。 –

+0

或者将它附加到您创建的jira上... – khmarbaise

回答

0

我遇到了这个问题,除了在Fast Build Configuration中建议的设置(例如,在每次运行中被调用的项目下载的一些工件)的其他问题之外,还实现了我自己的解决方案。而不是调用:安装目标,你可以使用下列内容:

<plugin> 
    <groupId>com.github.veithen.invoker</groupId> 
    <artifactId>resolver-proxy-maven-plugin</artifactId> 
    <version>0.1</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>start</goal> 
       <goal>stop</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

注意,没有必要明确配置settings.xml或专用的本地仓库。这是自动完成的。

目前插件中的代码是实验性的。如果结果足够强大,我会提交一个将它集成到maven-invoker-plugin中的补丁。更多信息here

+0

这实际上会将artifact安装到我的本地m2存储库中,但对吗?绝对不是我想要的东西,如果我没有明确指定'mvn install' –

+0

请注意,这也是'maven-invoker-plugin'所做的,除非你设置了'localRepositoryPath'。 –

+0

对,我[这样做](https://github.com/tavianator/MINVOKER-191/blob/master/project-3/pom.xml#L31)在示例项目中。另一件事是我想这必须附加到正在安装的模块,而不是需要它进行测试的模块。如果我只是构建项目1,避免安装(甚至是单独的回购)会很好。 –