我在项目中使用了许多开源库,并使用 license-maven-plugin 来收集有关它们的信息。我可以看到目标目录和 THIRD-PARTY-included-modules.txt 中的所有许可证文本,如下所示:
Lists of 144 third-party dependencies.
(Apache License 2.0) Commons Codec (commons-codec:commons-codec:1.8 - http://commons.apache.org/proper/commons-codec/)
(Apache License 2.0) Commons IO (commons-io:commons-io:1.4 - http://commons.apache.org/io/)
(Apache License 2.0) Commons Logging (commons-logging:commons-logging:1.1.3 - http://commons.apache.org/proper/commons-logging/)
(CDDL) JavaBeans Activation Framework (JAF) (javax.activation:activation:1.0.2 - http://java.sun.com/products/javabeans/jaf/index.jsp)
...(and 140 more lines)
然而,这似乎不符合法律义务:
(来自 MIT 许可证)上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
据我所知,我应该包含以下通知:
版权所有 (C) 2011, 2014, 2015 辻川龙宏
我该如何收集应包含在“关于”页面中的版权声明?
这是我的 pom.xml:
<project ...>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>1.8</version>
<configuration>
<!--
mvn clean license:add-third-party license:download-licenses
-->
<projectName>Play SQL PageObjects</projectName>
<licenseName>Commercial License</licenseName>
<organizationName>Play SQL S.A.S.U.</organizationName>
<inceptionYear>2015</inceptionYear>
<!-- Files we input into license-maven-plugin -->
<licenseFile>${basedir}/src/license/PLAY_SQL_LICENSE.txt</licenseFile>
<useMissingFile>true</useMissingFile>
<!-- The input file with the list of licenses, for those which can't be found automatically -->
<missingFile>src/license/THIRD-PARTY.properties</missingFile>
<!-- Same as 'missingFile' but in XML, probably -->
<licensesConfigFile>src/license/licenses-manual.xml</licensesConfigFile>
<!-- Output folder -->
<outputDirectory>${project.basedir}/target/classes/META-INF/licenses</outputDirectory>
<!-- Text with the output list of all licenses. Just contains the list of projects and websites, does not contain the copyright notices -->
<thirdPartyFilename>THIRD-PARTY-included-modules.txt</thirdPartyFilename>
<!-- XML with the output list of all licenses -->
<licensesOutputFile>target/classes/META-INF/licenses/licenses-generated.xml</licensesOutputFile>
<!-- Folder with an output dump of all license text. Usually they contain the license template (for APL2) but not the copyright notices. -->
<licensesOutputDirectory>target/classes/META-INF/licenses/text</licensesOutputDirectory>
<includedScopes>compile</includedScopes>
<excludedScopes>test|provided|runtime|system</excludedScopes>
<excludedGroups>com.playsql</excludedGroups>
<licenseMerges>
<licenseMerge>Apache License 2.0|The Apache Software License|Version 2.0,Apache License, Version 2.0|The Apache Software License, Version 2.0|Apache License, Version 2.0|Apache 2</licenseMerge>
</licenseMerges>
</configuration>
</plugin>
我该如何使用license-maven-plugin(或任何其他工具)收集版权声明?
为此目的,我使用了 attribution maven 插件。 它生成一个 XML 文件,其中包含同一 POM 中依赖项的所有已知许可证数据。 然后,您可以将此 XML 文件包含在打包代码中并使用它来显示“关于”页面。
我创建了 mojohaus maven 许可证插件的一个分支。这里讨论: https://github.com/mojohaus/license-maven-plugin/issues/357。 没有经过深入测试,很可能还存在一些小错误,但就我的目的而言,它正在工作。但请注意! 专业论点:与 ScanCode 相比,该解决方案速度超级快,ScanCode 甚至可以暴力扫描二进制文件,并且还需要在扫描之前提取所有档案。
该插件将其可以获取的所有内容写入
target\generated-resources\licenses.xml
,包括许可证和通知文本文件。
声明文本文件通常包含您需要的版权声明。版权声明是编写扩展的主要原因之一。
只需从 https://github.com/JD-CSTx/license-maven-plugin 克隆它。 快速构建和安装它只是为了测试使用
mvn install -DskipITs=true -DskipTests=true
。
目标是
license:aggregate-download-licenses
,版本是2.1.0-SNAPSHOT
,选项是extendedInfo
。
它还可以使用选项
writeExcelFile
写入Excel文件,请注意:由于32,767个字符的限制,Excel单元格被截断。
为您的项目进行配置
pom.xml
:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>2.1.0-SNAPSHOT</version>
<configuration>
<includeTransitiveDependencies>true</includeTransitiveDependencies>
<verbose>true</verbose>
<!-- New -->
<extendedInfo>true</extendedInfo>
<!-- New -->
<writeExcelFile>true</writeExcelFile>
...
我希望得到一些对此的反馈。
我不知道有任何有效的版权扫描器/收集器可用作 Maven 插件。但是您可以使用 ScanCode 工具包来收集版权:它就是为此目的和其他相关目的而设计的。 (免责声明:我是那里的开发人员之一)
这只需要Python解释器,安装后,运行
scancode --copyright <your directory tree> --jsonpp <json output file>
即可获取JSON格式的版权。
编辑:它还可以输出 CSV、YAML、SPDX 和 CycloneDX
将扫描代码包装在 Maven 插件中应该相当容易。需要帮助!
虽然与生成通知 md 文件的 maven-license-plugin 没有特别相关,但我采取的另一种巧妙方法是按照此处的格式自动生成通知 md 文件:(可以使用任何格式,如步骤如下)
https://github.com/eclipse/openmcx/blob/main/NOTICE.md
这就是我所做的:
PS: 好处是你可以要求 ChatGPT 或 Meta AI 为你生成这个 python 脚本。如果有多个存储库需要执行此操作,您可以使用 GitHub 可重用工作流程和复合 GitHub 操作来维护单个单独存储库中的脚本、模板文件)