不同构建配置文件的不同依赖项

Posted

技术标签:

【中文标题】不同构建配置文件的不同依赖项【英文标题】:Different dependencies for different build profiles 【发布时间】:2010-09-15 01:52:52 【问题描述】:

maven pom.xml 文件中是否可以为不同的配置文件设置不同的依赖项?

例如

mvn -P debug
mvn -P release

我想在一个配置文件中选择一个不同的依赖 jar 文件,该文件具有相同的类名和相同接口的不同实现。

【问题讨论】:

这可以在针对不同的 Web 服务器时使用。例如,在为 JavaEE 5 服务器构建时,它提供了诸如 JAXB 之类的库,您不应将其包含在您的 war 文件中,而为 JavaEE 1.4 服务器构建时,您应该在其中包含 JAXB jar。 【参考方案1】:

引用Maven documentation on this:

配置文件元素包含可选的激活(配置文件触发器)和在该配置文件已激活时要对 POM 进行的更改集。例如,为测试环境构建的项目可能指向与最终部署不同的数据库。 或者依赖项可能会根据使用的 JDK 版本从不同的存储库中提取

(重点是我的)

只需将release 配置文件的依赖项放入配置文件声明本身,并对debug 执行相同操作。

调试 … …依赖> 依赖> … 发布 … …依赖> 依赖> …

【讨论】:

此方法会导致代码在编辑模式下无法解析。如果 debug 处于活动状态,则 release 的依赖 jar 将丢失,并且代码将出错。如何解决? 您可以在依赖层次结构中将发布特定依赖的范围设置为“提供”,并在发布配置文件部分将范围重置为“编译”。这样依赖项可用于编译,但不能用于“调试”配置文件的最终战争。 恕我直言,配置文件没有用,至少对于依赖项而言:IDE 出错,依赖项停止解析,应用程序最终无法运行。我期待更多。【参考方案2】:

您的 groupId、artifactId 应在您的配置文件中标记为属性,您可以将依赖项移动到通用部分。

【讨论】:

只有当你有 1 个依赖时才会出现这种情况。如果调试和发布之间的依赖项数量不同,则标记化将不起作用。就此而言,我建议不要标记化并明确定义配置文件部分中的 deps。 另一个答案对我不起作用,因为默认配置文件依赖项仍与其他特定配置文件依赖项一起包含。你的回答很好。 @Vlad 您是否从 POM 的主体中删除了依赖项?否则你会得到它两次。 (请参阅***.com/q/24855678/6944068,了解如何确保一个配置文件始终处于活动状态。)

以上是关于不同构建配置文件的不同依赖项的主要内容,如果未能解决你的问题,请参考以下文章

发布构建期间配置文件中的 Maven 依赖项

Gradle使用不同的属性文件构建多个.war文件[关闭]

如何在 pom.xml 中定义 2 组配置文件?

配置具有公共依赖项的 TypeScript 项目以构建多个纯 JavaScript 输出文件

MSBuild:是不是可以在实际项目文件中指定项目构建依赖项?

Webpack4 常用配置