我们需要获得服务依赖项的所有许可证。虽然很容易从报告插件(或mojohaus 的 license-maven-plugin)中获取它们,但我们的律师希望我们真正找到每个依赖项的来源并获取许可证文件。你知道我们怎样才能做到这一点吗?
作为替代方案 - 如何获取工件的 scm 连接 URL?我可以自己使用这些信息来自动化这样的过程。
我们需要获得服务依赖项的所有许可证。虽然很容易从报告插件(或mojohaus 的 license-maven-plugin)中获取它们,但我们的律师希望我们真正找到每个依赖项的来源并获取许可证文件。你知道我们怎样才能做到这一点吗?
作为替代方案 - 如何获取工件的 scm 连接 URL?我可以自己使用这些信息来自动化这样的过程。
我开发了一个网站https://www.licensediscovery.io,它将帮助 Java 开发人员找到他们和他们的软件所依赖的工件的许可证。
Licensediscovery.io 允许用户使用以下任何语法搜索 Java 工件:Maven、Gradle、SBT、Ivy、Leiningen、Grape、Buildr 或 plain。Licensediscovery.io 将收集、解析和呈现所有可识别的 Java 工件,并以表格、条形图、圆环图或网络图的形式呈现它们及其许可证。
LicenseDiscovery.io 刚刚发布,仍处于早期阶段。但是,它可能会解决您的问题。
反馈也将非常感激。
我创建了 mojohaus maven 许可证插件的一个分支。在这里讨论: https ://github.com/mojohaus/license-maven-plugin/issues/357 。没有经过深入测试,很可能还有一些小错误,但出于我的目的,它正在工作。但请注意!Pro 论点:与 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
。
它还可以使用选项写入 excel 文件writeExcelFile
,请注意:由于 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>
...
我希望对此有一些反馈。
为了把事情做好,你首先需要为你所依赖的每个 Jar 收集所有的二进制和源 Jar。这可能是一个好的开始:http ://maven.apache.org/components/plugins/maven-dependency-plugin/ (我不是 maven 专家)。它似乎也能够获取资源。你可能想运行这样的东西,但我不确定来源在哪里:
mvn dependency:sources
另请参阅:https ://stackoverflow.com/a/11361413/302521
获取这些内容后,您可以安装 ScanCode ( https://github.com/nexB/scancode-toolkit ),然后运行extractcode
包含您的 jar 的目录以将它们全部解压,然后scancode --format html-app <you jar dir> my-jars.html
获取许可证和版权的详细报告: 在浏览器中打开 my-jars.html。
披露:我是 ScanCode 的作者之一,顺便说一句,我正在努力按照您的要求进入 ScanCode:解析 Maven dep 树,获取所有 Jars 和源,最后收集 POM 元数据并在二进制文件 + 源上运行扫描。你有兴趣参与吗?
关于 scm 连接,它在 POM 中并不一致,所以我不推荐这条路线。源罐子的频率甚至更低。