我想知道Nexus 存储库管理器是否包含像 Artifactory 这样的许可证管理器(使用此插件:http ://wiki.jfrog.org/confluence/display/RTF/License+Control )。
如果无法通过插件在 Nexus 中执行此操作,您如何管理项目依赖项的许可证(使用 maven)?
例如,对于商业项目,我不能将 GPL 库包含到最终工件(.jar、.war 等)中。
我想知道Nexus 存储库管理器是否包含像 Artifactory 这样的许可证管理器(使用此插件:http ://wiki.jfrog.org/confluence/display/RTF/License+Control )。
如果无法通过插件在 Nexus 中执行此操作,您如何管理项目依赖项的许可证(使用 maven)?
例如,对于商业项目,我不能将 GPL 库包含到最终工件(.jar、.war 等)中。
可以使用 Maven 许可证验证器插件模拟 Artifactory 功能
http://code.google.com/p/maven-license-validator-plugin/
这两种方法的实际问题是,很少有 Maven Central 模块在其 POM 中具有最新的许可证信息。因此,据我所知,这是一个绝妙的主意,但它并不能真正解决评估构建的许可证合规性问题...
我理想的解决方案是一组外部进程,它们扫描 Nexus 存储库的内容以获取可用的许可证信息。然后,此信息用于播种 Nexus Professional 的采购套件,以控制已批准存储库的内容以用于发布(非开发构建)。
一些二进制文件包含文本许可文件,或者也可以扫描相关的源代码包以获取许可和 IP 信息。许多第三方工具可用于执行此任务。我一直在考虑的有:
总之,在 Maven Central 能够提供关于模块许可的可靠元数据之前,我认为这个问题的解决方案将保持高度定制化和次优
Artifactory 采用的方法有点不同,因为原始工件元数据仅用作起点,但最终用户可以完成和修改丢失/不正确的许可证信息:
这使您可以在构建过程提交和拾取新依赖项(及其各自的许可证)后立即处理它们的更改/添加。
另一个关键区别是处理具有多个许可证的工件的能力,其中只有一个许可证获得批准,而其他许可证则没有。
你可以在这里读更多关于它的内容 -
http://wiki.jfrog.org/confluence/display/RTF/License+Control
与 Artifactory + Ivy + 一起使用的定制解决方案ant
是扫描每个模块以获取许可证信息。如果找到许可证,则在 Artifactory 中填充该许可证文件并更新它ivy.xml
以使其作为已发布的工件可用。然后调用<ivy:retrieve/>
以获取许可证及其 jar 文件。
可以在模块的ivy.xml
URL 中指定许可证。在这种情况下,使用ant
的get
任务下载许可证并将其写入文本文件。
[inside log4j's ivy.xml as an example]
<ivy-module xmlns:m="http://ant.apache.org/ivy/maven" version="2.0">
<info organisation="log4j" module="log4j" revision="1.2.16" status="integration"
publication="20120620150430">
<license name="The Apache Software License, Version 2.0"
url="http://www.apache.org/licenses/LICENSE-2.0.txt"/>
...
</info>
</ivy-module>
或者,许可证可以作为文本文件包含在模块.jar
文件中。在这种情况下,使用ant
的unjar
任务来提取许可证并将其写入文本文件。
[inside junit's .jar file as an example]
junit-4.8.2.jar/LICENSE.txt
将许可证写成文本文件后,使用ant
的xmltask任务将许可证添加为工件。
[inside log4j's ivy.xml as an example]
<publications>
<artifact conf="master" ext="jar" name="log4j" type="bundle"/>
<artifact conf="sources" ext="jar" m:classifier="sources" name="log4j" type="source"/>
<artifact conf="javadoc" ext="jar" m:classifier="javadoc" name="log4j" type="javadoc"/>
<!-- next line added -->
<artifact conf="master" ext="txt" name="log4j" type="license"/>
</publications>
将修改后ivy.xml
的许可证和许可证发布回 Artifactory。
<ivy:resolve file="${ivy.xml}" />
<ivy:publish resolver="${resolver}" pubrevision="@{rev}" status="integration"
overwrite="true" forcedeliver="true" haltonmissing="false"
srcivypattern="${ivy.local}/[organisation]/[module]/ivy-[revision].xml" >
<artifacts pattern="${ivy.local}/[organisation]/[module]/ivys/ivy-[revision].[ext]" />
<artifacts pattern="${ivy.cache.dir}/[organisation]/[module]/licenses/[module]-[revision].[ext]" />
</ivy:publish>
与您的构建捆绑时,用于<ivy:retrieve/>
获取许可证及其 jar 文件。
<ivy:retrieve pattern="${ivy.local}/[artifact].[ext]" conf="compile, runtime" type="jar, license" />