我有一个包含两个模块的项目。模块base
是pom
,应该由某种类型的项目用作父项。模块archetype
是一个原型,它创建一个使用base
项目作为父项目的项目。我想使用maven-release-plugin
来发布这些项目。问题是archetype
有一个集成测试,需要将base
安装到本地存储库(test
- 目标作为集成测试的一部分在新创建的项目上运行)。当我准备发布时,maven-release-plugin
仅为每个模块运行test
- 目标。这意味着集成测试将始终失败,因为无法找到base
,因为它尚未安装。有没有解决方法呢?
答案 0 :(得分:1)
我遇到类似情况,原型生成的项目使用在同一反应堆构建中构建的Maven插件。我使用invoker:install
将我的插件安装到仅用于原型集成测试的本地存储库中(对localRepositoryPath
和invoker:install
使用相同的archetype:integration-test
); invoker:install
实际安装了反应堆中所有已经构建的工件,所以我甚至不需要指定任何东西。我没有遇到任何排序问题(我的插件是在我的原型之前构建的),但是我认为我可以在原型中添加对插件的依赖(在scope=test
中)。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-invoker-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<goals>
<goal>install</goal>
</goals>
</execution>
<configuration>
<localRepositoryPath>${project.build.directory}/it-repo</localRepositoryPath>
</configuration>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.2</version>
<configuration>
<localRepositoryPath>${project.build.directory}/it-repo</localRepositoryPath>
</configuration>
</plugin>
答案 1 :(得分:0)
嗯,您可以(并且可能应该)定义聚合所有这些内部相关模块的多模块pom
项目,这样它们就可以在公共反应堆内构建,即使它们可以在相同的反应堆中也可以看到彼此。未安装到本地存储库。然后,您将始终释放此pom
项目(聚合器)及其所有模块(包括base
和archetype
)。
答案 2 :(得分:0)
解决方案是在原型的pre-integration-test
阶段运行install:file-install
,并将其配置为安装所需的父级。