模块需要安装其他模块

时间:2012-05-30 07:04:47

标签: maven maven-release-plugin

我有一个包含两个模块的项目。模块basepom,应该由某种类型的项目用作父项。模块archetype是一个原型,它创建一个使用base项目作为父项目的项目。我想使用maven-release-plugin来发布这些项目。问题是archetype有一个集成测试,需要将base安装到本地存储库(test - 目标作为集成测试的一部分在新创建的项目上运行)。当我准备发布时,maven-release-plugin仅为每个模块运行test - 目标。这意味着集成测试将始终失败,因为无法找到base,因为它尚未安装。有没有解决方法呢?

3 个答案:

答案 0 :(得分:1)

我遇到类似情况,原型生成的项目使用在同一反应堆构建中构建的Maven插件。我使用invoker:install将我的插件安装到仅用于原型集成测试的本地存储库中(对localRepositoryPathinvoker: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项目(聚合器)及其所有模块(包括basearchetype)。

答案 2 :(得分:0)

解决方案是在原型的pre-integration-test阶段运行install:file-install,并将其配置为安装所需的父级。