我们希望发布一个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继承有效地使所有子项目开放源代码呢?例如,是否有防止继承<licenses>节的POM设置?
更新:我为这个功能提交了改进请求票证MNG-7562。
发布于 2022-10-07 07:29:37
在我看来,你有三个选择:
<licenses>,并且期望使用它的开发人员将覆盖它,如果projet不符合所提供的许可。<licenses>,并在README中包含许可证(在这种情况下,如果需要的话,使用POM的开发人员也必须指定许可证)。编辑:删除只为url工作的子继承属性的部分(见下面的注释)
https://stackoverflow.com/questions/73239332
复制相似问题