我公司为使用该软件的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或其任何传递依赖项。
答案 0 :(得分:0)
我认为您的问题根本不适用于个人资料。它是关于传递依赖关系如何适用于战争包装。根据设计,它们不起作用:) War存档包含其在WEB-INF / lib文件夹中的依赖项,或者如果它被打包在耳中,它可以与ear libs共享库。您可以在此wiki article上阅读更多问题。这是关于瘦子战,但主题也与你的问题有关。
对你而言,有趣的是this JIRA issue。
快速但不优雅的解决方案是将包装形式改为pom(或使用pom包装创建重复的pom)。
答案 1 :(得分:0)
为什么不创建一个api70-deps pom项目,让你的战争和依赖项目都将其拉入,激活配置文件或以其他方式?
这种方法对我有用......我的poms变得更加整洁。