发布开源 Maven 父 POM,而不继承 `<license>`

Gar*_*son 8 pom.xml maven

我们想要发布一个 Maven POM,它可用作各种项目的父 POM。有些使用 POM 的项目将是开源的,但有些则不会。为了将我们的父 POM 指定为开源,我们包括以下内容:

<licenses>
  <license>
    <name>Apache-2.0</name>
    <url>https://www.apache.org/licenses/LICENSE-2.0</url>
    <distribution>repo</distribution>
  </license>
</licenses>
Run Code Online (Sandbox Code Playgroud)

这实质上是说,“这个项目是开源的”。

不幸的是,由于POM 继承,任何使用此父 POM 的项目也将有效地表示“该项目也是开源的”,因为所有后代项目的有效 POM 也将包含相同的许可证部分。

开发人员可以尝试记住包含一些<licenses>部分来覆盖此许可证,但父 POM 的重点是它应该为开发人员提供更少的工作,而不是更多的工作。此外,一些私人项目(甚至我们的)可能根本不希望表明许可证!

如果不通过 POM 继承有效地使所有子项目也开源,我们的公共父 POM 如何表明它是开源的?<licenses>例如,是否有 POM 设置来防止该部分被继承?

更新:我为此功能提交了改进请求单MNG-7562 。

小智 0

从我的角度来看,你有两个选择:

  • 将其包含<licenses>在 POM 中,如果项目不符合所提供的许可证,则期望使用它的开发人员会覆盖它。
  • 从您的 POM 中删除<licenses>并包含在README许可证中(在这种情况下,使用您的 POM 的开发人员还必须指定许可证(如果需要)。

编辑:删除有关仅适用于 url 的子继承属性的部分(请参阅下面的评论)