从命令行中取消激活Maven配置文件

94

我的maven设置文件~/.m2/settings.xml中有一个默认激活的配置文件。

是否可以通过命令行来取消激活它,类似于以下操作:

mvn -P!profileActivatedByDefault
3个回答

153

确实,你走对了路。 来自maven profiles user guide

停用一个配置文件

从Maven 2.0.10版本开始,可以通过在标识符前面加上'!'或'-'的方式来停用一个或多个配置文件,如下所示:

mvn groupId:artifactId:goal -P !profile-1,!profile-2

这可以用于停用被标记为activeByDefault的配置文件或者通过其激活配置而将其激活的配置文件。

正如@Calfater在评论中指出的那样,在大多数shell(Linux和MacOS上的bash、zsh和其他shell)中需要转义感叹号,但在Windows命令行中不需要。

转义机制取决于shell,但通常可以执行以下操作:

mvn groupId:artifactId:goal -P \!profile-1
mvn groupId:artifactId:goal -P '!profile-1'
或者,如下面Shaun Morris所建议的那样,使用-代替!,但是在-P和配置文件之间不要有空格
mvn groupId:artifactId:goal -P-profile-1,-profile2

31
这个解决方案是有效的,但在Linux终端中需要转义'!'字符:mvn groupId:artifactId:goal -P \!profile-name - Calfater
@Calfater:确实,这值得编辑原帖。 - GPI
转化字符把我坑惨了...在Windows上却完美运行。谢谢。 - cabaji99
1
@Calfater 在使用 zsh 时也遇到了感叹号的问题。我只需在单引号之间加上 -P,就像这样:-P '!dev' - Kirill
@Derp:单引号可以禁用 zsh / bash / ... 的插值。感谢你的技巧。 - Calfater

38

在 Mac 上,当我尝试使用 '!' 时,出现了以下错误:

mvn groupId:artifactId:goal -P!profile-1
-bash: !profile: event not found

使用 '-' 可以完成以下工作:

mvn groupId:artifactId:goal -P-profile1

或者你可以这样做:

mvn groupId:artifactId:goal -P\!profile1

在Linux上相同(macOS是基于UX的操作系统) - mirec
在Windows上,'-'字符是必需的,以停用默认启用的配置文件。 - AntJavaDev

6
从Maven 2.0.10版本开始,可以通过在标识符前加上字符'!'或'-'来使用命令行停用一个或多个配置文件,如下所示:
mvn groupId:artifactId:goal -P !profile-1,!profile-2

这可以用来停用标记为activeByDefault的配置文件或通过其激活配置文件的其他配置文件。 参考Maven文档 因为感叹号!是大多数命令行工具的特殊字符,所以您可能需要转义它 请参阅此处

6
您说得对,通过 -P 激活配置文件会忽略其他配置文件(例如 activeByDefault 或 <activation>),但仅使用去激活语法(! 前缀)将仅停用这些配置文件,并不会覆盖 activeByDefault<activation> 的声明。 - GPI
1
文档已更改,现在-P将添加配置文件以及activeByDefault配置文件:"此选项需要一个参数,即逗号分隔的要使用的配置文件ID列表。当指定此选项时,除了通过其激活配置或settings.xml中的<activeProfiles>部分激活的任何配置文件外,还将激活指定在选项参数中的配置文件。" - Jacob van Lingen
感谢提供最新的信息。我不知道这个变化已经持续了多久。@SparkOn:这会改变你回答的有效范围,你可能需要编辑一下以反映这一点。 - GPI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接