【问题标题】:Activate profile in depended-on POM?在依赖的 POM 中激活配置文件?
【发布时间】:2010-12-11 08:00:59
【问题描述】:

我的公司为使用该软件的 Java 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

生成的构建不包括集成库或其任何传递依赖项。

【问题讨论】:

  • 依赖战争的“其他项目”的包装是什么?这个项目是继承自war项目吗?
  • @user19113:配置文件不可传递且不可继承。您只能通过父 POM 共享同一个人资料来做到这一点。

标签: maven-2 profile dependencies


【解决方案1】:

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

这种方法对我来说很有效......我的 poms 变得更加整洁。

【讨论】:

    【解决方案2】:

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

    对你感兴趣的也是this JIRA issue

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

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 2016-05-07
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2018-10-08
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多