问题标签 [maven-profiles]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
206 浏览

maven - 通过父 POM 构建时,Maven 未使用正确的配置文件

我有一个 Maven 项目,它使用配置文件在构建时注入应用程序属性。注入的属性存储在我要求 Maven 构建项目时使用的 Maven 设置文件中。

我的构建命令可以有两种风格;

当我构建 OPTION1 然后尝试构建 OPTION2 时会出现问题。有时 Maven 会继续使用不需要的配置文件中的属性。更奇怪的是,并不是所有的子项目都会有这个问题。

任何人都可以建议即使我在构建命令中明确定义了文件,为什么 Maven 可能会继续使用旧配置文件?

谢谢

0 投票
5 回答
29308 浏览

maven - Maven 中的继承配置文件

我的父母 pom 中有以下个人资料

为什么 P1 在子 POM 中处于活动状态而 P2 不处于活动状态?

该目录${project.basedir}/src/main/whatever,在父项目中不存在,但在子项目中存在。

0 投票
4 回答
22496 浏览

maven - Maven 配置文件激活条件中 os.family 的值

Maven 允许根据其运行的操作系统系列激活某些构建配置文件,例如:

围绕这个问题有很多问题:那么允许的值是os.family多少?它们区分大小写吗?Linux 会被视为Unix吗?或者unix?等等。

我在哪里可以找到有关允许值的信息——或者,至少,Maven 从哪里获取这些值?环境变量?

0 投票
1 回答
207 浏览

java - 是否可以在一个地方定义一个 Maven 3 配置文件(及其激活策略)并在以后重用它?

我的构建过程非常复杂,在 Windows 中运行时需要执行一些操作,在 Linux 中运行时需要执行一些操作,并且这些操作需要放置在许多不同的 POM 中。

我知道我可以根据操作系统激活某个配置文件。但我发现的所有示例都包括在标签内采取行动<profiles> ... </profiles>,其中还包括这些配置文件的激活标准。我试图避免的是必须声明许多这样的部分:

POM 1:

然后,当我需要在不同的 POM 中为 Windows 做一些事情时,同样如此,很多次……对于某些配置文件,激活更广泛。

我想在一个地方定义激活策略,然后执行以下操作:

只需根据活动配置文件以不同方式配置插件,而无需在大量 POM 文件中复制插件声明和每个配置文件的所有内容......

另外,如果配置文件 A 处于活动状态,我如何在多个位置进行配置?我是否必须在每个 POM 中重新声明其激活策略的标签,或者有​​没有办法避免所有这些重复?

任何帮助表示赞赏,我有点困惑和惊讶,在网上找到除了基本示例之外的任何东西是多么困难。

0 投票
2 回答
8007 浏览

unit-testing - 在 Maven 中组合配置文件以跳过多个类别的单元测试?

我在尝试配置 Maven 以排除基于多个配置文件的某些类别的单元测试时遇到问题。

我为单元测试定义了两个类别:SlowTest那些需要很长时间才能运行WindowsTest的单元测试,以及那些只能在 Windows 环境中执行的单元测试。

我在项目pom.xml文件中定义了两个配置文件,如下所示:

因此,例如,当我想运行测试并排除任何慢速测试时,我可以执行mvn -PskipSlowTests test. 如果我想跳过任何 Windows 测试,我可以mvn test在非 Windows 操作系统上执行(或-PskipWindowsTests在命令行上明确指定)。

这里的问题是,当skipSlowTestsskipWindowsTests配置文件都被激活时,只有 Windows 测试被跳过。缓慢的测试仍在运行。当 maven 构造有效pom.xml文件时,它会应用skipSlowTests配置文件并配置maven-surefire-plugin以排除组SlowTest.class。然后skipWindowsTests应用配置文件,这会将排除的组覆盖为WindowsTest.class.

我真正想要的是SlowTest.class,WindowsTest.class当两个配置文件都被激活时被排除的组,但我无法找到一种方法来做到这一点。

我无法在 Maven 中看到将值附加到属性,例如

这被破坏了,因为在为属性pom.xml赋值时存在递归。excludedGroups

并且没有办法设置第三个配置文件(例如skipSlowTestsAndWindowsTests),只要skipSlowTestsskipWindowsTests都被激活,它就会激活。

这里有什么建议吗?也许添加单独的阶段maven-surefire-plugin(一个用于慢速测试,一个用于 Windows 测试,一个用于所有其他测试)并使用配置文件来确定哪些阶段运行?

编辑#1

我尝试为以下创建单独的执行阶段maven-surefire-plugin

此配置将在三个单独的执行中运行测试:default-test执行将运行每个测试,除了慢速测试和 windows 测试;执行slow-test将只运行慢速测试;并且windows-test执行将仅运行 Windows 测试。如果同时启用了skipSlowTestsskipWindowsTests配置文件,则将跳过慢速测试和 Windows 测试。

这里的问题是当有一个测试同时标有SlowTestWindowsTest类别时:

skipSlowTests仅启用配置文件时,windows-test执行仍会运行,并且由于该slowWindowsTestCase方法被标记为 windows 测试,因此即使我们想跳过慢速测试,它也会被执行。同样,这个测试用例也将在skipWindowsTests仅启用配置文件时执行。跳过此测试用例的唯一方法是同时指定skipSlowTestsskipWindowsTests配置文件。

我尝试如下修改执行:

但是现在该slowWindowsTestCase方法永远不会执行。

编辑#2

即使我可以让测试执行正常工作,我也需要添加一个依赖项,maven-surefire-plugin以便在测试期间可以加载SlowTest和接口。WindowsTest我已经放入maven-surefire-pluginpluginManagement我父 POM 的部分,但是为此插件定义的任何依赖项都不能有test范围。因此,在定义SlowTestWindowsTest接口的模块之外运行测试将不起作用。我可以test在配置文件中为插件添加范围依赖项,但这不会涵盖没有配置文件处于活动状态的情况。

0 投票
2 回答
559 浏览

maven - 如何仅在某些模块中运行“maven-exec-plugin”?

我们有一个应用程序,其中包含多个生成可部署工件的模块。我们通过仅指定依赖项的“父 pom”和仅具有模块列表的“聚合器 pom”将“父”层次结构与“模块”层次结构分开。我们有一个主要的聚合器 pom,它列出了我们所有的模块,包括父 pom 和“工件” pom。

大多数“工件” pom 都会产生我们最终想要部署到 OSGi 服务器 (karaf) 的东西。我们希望能够运行构建所有内容并将每个可部署模块部署到 Karaf 的构建。我们可以使用“maven-exec-plugin”指定部署。在所有可以构建可部署工件的模块的父 pom 中,我们指定一个包含 maven-exec-plugin 定义的配置文件。

我们使用“mvn clean install -Pprofilename”运行构建。这接近工作,但它抱怨“父pom”上的警告,因为它们没有任何要部署的东西。

我还没有尝试过,但我推测可能可行的方法是在父 pom 中的配置文件定义中添加一个“激活”部分,该部分指定一个类似“canDeployToKaraf”的属性。然后我认为我们只会在生成可以部署到 Karaf 的工件的 pom 中定义这个属性。

是否会为聚合器 pom 尝试构建的每个模块考虑配置文件激活,还是会为整个构建激活或不激活?如果是前者,那么这种策略似乎有可能奏效。如果是后者,那就不行了。

这行得通吗?有一个更好的方法吗?

附录

刚刚向我指出,尝试在命令行上手动指定配置文件,然后尝试“不激活”某些 pom 的配置文件是没有意义的。在命令行上指定配置文件“激活”配置文件。

我真正需要做的是弄清楚如何在父 pom 中配置“maven-exec-plugin”,以便它在子 pom 中的行为是合适的。在需要部署到 Karaf 的子 pom 中,但在不产生可部署工件的子 pom 中,它什么也不做。

有没有人看到这样做的方法?

0 投票
1 回答
426 浏览

maven-3 - 如何在执行 maven-release-plugin 目标期间关闭配置文件

在正常开发过程中,我有一个需要执行的构建功能。在发布期间,该构建功能需要替换为发布等效项(在这种情况下是 Proguarding 而不是复制)。

我曾认为我可以使用 2 个配置文件(一个 DevelopmentProfile 和一个 ReleaseProfile)以及 DevelopmentProfile activeByDefault 到达那里。

例如

并通过 release-plugin releaseProfiles 属性打开 ReleaseProfile 并通过 releaseProfiles 属性关闭 ReleaseProfile

考虑到这篇关于“停用配置文件”的文章http://maven.apache.org/guides/introduction/introduction-to-profiles.html以及 release-plugin 的源代码只是使用提供的字符串。

但这似乎不起作用。我怀疑是因为发布插件预先添加了活动配置文件,这可能会覆盖配置文件停用。

任何状况之下。有没有另一种方法可以在发布期间停用配置文件。或者以其他方式确保在任何时候只有这 2 个配置文件中的一个处于活动状态。

而且我对涉及我传递系统属性以显式激活配置文件的解决方案不感兴趣,因为它们不够强大,无法承受这里的工作负载。

0 投票
1 回答
21 浏览

maven - 在java(maven)项目中管理不同的依赖上下文

我有一个应用程序,其中所有代码都非常有凝聚力,但在不同的类环境中运行。应用程序使用不同的 API 以多种方式执行相同的操作。

因此,我希望构建的不同部分使用不同的类路径运行。使用的优点/缺点是什么

  • maven 子模块

相对

  • Maven 配置文件

要做到这一点?

在构建中,我需要将所有代码路径的结果集成到最终测试中 - 所以我不能将此项目分成完全独立的源代码库。

0 投票
1 回答
31 浏览

maven - Maven 仅为特定 pugin 启用配置文件

是否可以仅在构建特定插件/目标时激活 Maven 配置文件?

如果是这样,您将如何在 ~/.m2/settings.xml 中进行配置?

0 投票
1 回答
3165 浏览

jakarta-ee - 不同 Maven 配置文件的不同持久性单元

我想根据所选的 Maven 配置文件使用两个不同的数据库。对于“生产”配置文件,我想使用 MySQL 数据库,而对于“开发”配置文件,我想使用内存中的 HSQLDB。

我发现可以有两个 persistence.xml 文件。一个在“src/main/resources/META-INF”中,另一个存储在“src/test/resources/META-INF”中。这使得选择不同的数据库进行测试成为可能。

但是是否也可以根据所选的 Maven 配置文件进行数据库选择?