我们想要发布一个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。
1条答案
按热度按时间nc1teljy1#
我开始觉得这确实是Maven继承的一个设计缺陷
这是基本的继承。如果你的父母有财产,那么孩子继承他们。在我看来,你有三个选择:
<licenses>
包含在您的POM中,如果项目与提供的许可证不兼容,则希望使用它的开发人员将覆盖它。<licenses>
,并在README
中包含许可证(在这种情况下,使用POM的开发人员还必须指定许可证(如果需要))。