1

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

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

4

2 回答 2

0

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

对你来说有趣的还有这个 JIRA 问题

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

于 2009-10-29T20:48:23.137 回答
0

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

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

于 2009-12-16T11:59:03.667 回答