如何使用 Maven License Plugin 收集版权声明?

问题描述 投票:0回答:4

我在项目中使用了许多开源库,并使用 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(或任何其他工具)收集版权声明?

maven licensing
4个回答
2
投票

为此目的,我使用了 attribution maven 插件。 它生成一个 XML 文件,其中包含同一 POM 中依赖项的所有已知许可证数据。 然后,您可以将此 XML 文件包含在打包代码中并使用它来显示“关于”页面。


1
投票

我创建了 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>
       ...

我希望得到一些对此的反馈。


1
投票

我不知道有任何有效的版权扫描器/收集器可用作 Maven 插件。但是您可以使用 ScanCode 工具包来收集版权:它就是为此目的和其他相关目的而设计的。 (免责声明:我是那里的开发人员之一)

这只需要Python解释器,安装后,运行

scancode --copyright <your directory tree> --jsonpp <json output file>
即可获取JSON格式的版权。

编辑:它还可以输出 CSV、YAML、SPDX 和 CycloneDX

将扫描代码包装在 Maven 插件中应该相当容易。需要帮助!

参见https://github.com/nexB/scancode-toolkit


0
投票

虽然与生成通知 md 文件的 maven-license-plugin 没有特别相关,但我采取的另一种巧妙方法是按照此处的格式自动生成通知 md 文件:(可以使用任何格式,如步骤如下)

https://github.com/eclipse/openmcx/blob/main/NOTICE.md

这就是我所做的:

  1. 使用 maven-cycledx-plugin 生成 SBOM(JSON 或 XML 格式)
  2. 使用上述链接文件(或任何您想要用作模板的文件)创建一个模板。
  3. 使用上述链接文件中的占位符代替您想要特定于存储库的数据。 (例如:##third_party_licenses## 用于替换所有第三方许可证,##repo## 用于替换存储库名称)
  4. 编写一个 python 脚本,使用一些 XML 或 JSON 框架来解析生成的 SBOM 以获取占位符的值。
  5. 替换模板文件中的值并创建 NOTICE md 文件。
  6. 提交 NOTICE md 文件。 (提前配置git用户。如果使用GH操作,您可能不想使用GitHub bot来进行推送,而是使用GITHUB.ACTOR环境变量中的用户)

PS: 好处是你可以要求 ChatGPT 或 Meta AI 为你生成这个 python 脚本。如果有多个存储库需要执行此操作,您可以使用 GitHub 可重用工作流程和复合 GitHub 操作来维护单个单独存储库中的脚本、模板文件)

© www.soinside.com 2019 - 2024. All rights reserved.