在依赖POM中激活配置文件?

时间:2009-10-29 16:54:38

标签: maven-2 profile dependencies

我公司为使用该软件的Java API的项目管理软件编写配套产品。他们发布了新版API产品的新API版本,还发布了错误修复等版本。我们需要使用各种版本的软件(以及扩展名,API)来支持客户。为了在没有不必要的代码重复的情况下执行此操作,我们在产品中定义了包含每个API版本的必要依赖关系的配置文件。

我有一个使用这种技术构建的战争项目,激活了“api70”配置文件,另一个项目依赖于具有pom类型的战争项目,以便引入战争的依赖关系。问题是,在构建第二个项目时,即使我在构建依赖项目时在maven命令行上定义-Papi70,也不会包含特定于配置文件的依赖项。

有什么方法可以让它发挥作用吗?

在战争项目中:

<!-- API 7.0 profile. -->
<profile>
  <id>api70</id>

  <dependencies>
    <dependency>
      <groupId>com.bigcompany</groupId>
      <artifactId>integrationlibrary</artifactId>
      <version>7.0-a</version>
    </dependency>
  </dependencies>

  <properties>
    <apiversion>api70</apiversion>
  </properties>

</profile>

在依赖项目中:

<!-- Depend on war as type=pom for dependency mediation. -->
<dependency>
  <groupId>com.mycompany</groupId>
  <artifactId>warproject</artifactId>
  <version>${warVersion}</version>
  <type>pom</type>
</dependency>

用于构建依赖项目的命令行:

mvn -P api70 clean package

生成的版本不包含Integrationlibrary或其任何传递依赖项。

2 个答案:

答案 0 :(得分:0)

我认为您的问题根本不适用于个人资料。它是关于传递依赖关系如何适用于战争包装。根据设计,它们不起作用:) War存档包含其在WEB-INF / lib文件夹中的依赖项,或者如果它被打包在耳中,它可以与ear libs共享库。您可以在此wiki article上阅读更多问题。这是关于瘦子战,但主题也与你的问题有关。

对你而言,有趣的是this JIRA issue

快速但不优雅的解决方案是将包装形式改为pom(或使用pom包装创建重复的pom)。

答案 1 :(得分:0)

为什么不创建一个api70-deps pom项目,让你的战争和依赖项目都将其拉入,激活配置文件或以其他方式?

这种方法对我有用......我的poms变得更加整洁。