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



我们想要发布一个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>

这基本上说;这个项目是开源的;。

不幸的是,由于POM继承,任何使用该父POM的项目也将有效地说";这个项目也是开源的";,因为所有子项目的有效POM也将包括相同的许可部分。

开发人员可以尝试记住包含一些<licenses>部分来覆盖此许可证,但父POM的全部意义在于,它应该让开发人员少做一些事情,而不是多做一些事情。此外,一些私人项目(甚至我们的项目(可能根本不想表明许可证!

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

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

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

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

编辑:删除关于仅适用于url的子继承属性的部分(请参阅以下注释(

最新更新