使用activeByDefault是否违反maven最佳做法?

Ash*_*dal 6 maven maven-profiles

我想知道是否使用<activeByDefault>是一个maven最佳实践?

这里的建议似乎很合理,但你认为它是绝对的还是在某些情况下它不适用?

我发布了该页面上内容的快照以供后代使用:

在此输入图像描述

urs*_*rsa 0

长话短说

不,使用activeByDefault并不违反 Maven 最佳实践。

细节

正如文档中所述,此功能非常简单:

除非使用前面描述的方法之一激活同一 POM 中的另一个配置文件,否则此配置文件将自动对所有构建激活。当 POM 中的配置文件通过命令行或通过其激活配置激活时,默认情况下处于活动状态的所有配置文件都会自动停用。

然而在实践中,您的项目默认值可能(并且将会)有很多不同的条件:

  • 默认情况下 true active = 始终处于活动状态,除非明确停用
  • 遗留系统= 活动的,除非 JDK 高于(或低于)特定版本
  • else-profile = 活动,当基本配置文件停用时
  • 环境特定
  • 文件系统特定
  • 操作系统特定
  • ...

因此使用时activeByDefault需要满足三个条件:

  • 你需要这样的行为,如文档中所述
  • 简单的项目结构
  • 受控构建环境(开发、CI)

我看到了一些小项目,它得到了有效的使用。我看到过大型项目,其中禁止此功能。当然,我看到由于开发人员的无知(rtfm)而导致滥用此功能的项目。

结论

此功能对于 Maven 社区的一小部分可能有用。这是一个不常见 API 的例子,就像java.lang.Long#getLong- 在极少数情况下有用,但被大多数开发人员忽略了。

聚苯乙烯

默认配置文件无条件激活:

<profile>
    <id>active-unless-explicitly-deactivated</id>
    <activation>
         <file><exists>.</exists></file>
    </activation>
    ...
</profile>
Run Code Online (Sandbox Code Playgroud)

这是停用:

./mvnw -P !active-unless-explicitly-deactivated ...
Run Code Online (Sandbox Code Playgroud)