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

rn0zuynd  于 2022-11-02  发布在  Maven
关注(0)|答案(1)|浏览(169)

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

nc1teljy

nc1teljy1#

我开始觉得这确实是Maven继承的一个设计缺陷
这是基本的继承。如果你的父母有财产,那么孩子继承他们。在我看来,你有三个选择:

  • <licenses>包含在您的POM中,如果项目与提供的许可证不兼容,则希望使用它的开发人员将覆盖它。
  • 从POM中删除<licenses>,并在README中包含许可证(在这种情况下,使用POM的开发人员还必须指定许可证(如果需要))。
  • 编辑:删除有关仅对url起作用的子继承属性的部分(请参见下面的注解)*

相关问题