我想知道Nexus repository manager是否包含像Artifactory这样的许可证管理器(使用此插件:http://wiki.jfrog.org/confluence/display/RTF/License+Control)。
如果通过插件无法在Nexus中执行此操作,您如何管理项目依赖项的许可证(使用maven)?
e.g。对于商业项目,我不能将GPL库包含在最终工件(.jar,.war等)中。
答案 0 :(得分:7)
可以使用Maven许可证验证程序插件
模拟Artifactory功能http://code.google.com/p/maven-license-validator-plugin/
这两种方法的实际问题是,很少有Maven Central模块在其POM中具有最新的许可证信息。因此,从我所看到的,这是一个很好的想法,不能真正解决评估构建的许可证合规性的问题......
我理想的解决方案是一组外部流程,用于扫描Nexus存储库的内容以获取可用的许可证信息。然后,此信息用于为Nexus Professional的procurement suite提供种子,以控制已批准的存储库的内容以供在发布(非开发版本)中使用。
某些二进制文件包含文本许可证文件,或者也可以扫描相关的源代码包以获取许可证和IP信息。许多第三方工具可用于执行此任务。我一直在考虑的是:
总之,在Maven Central可以提供关于模块许可的可靠元数据之前,我认为这个问题的解决方案将保持高度定制和次优
答案 1 :(得分:1)
Artifactory采用的方法略有不同,因为原始工件元数据仅用作起点,但在一天结束时,用户可以完成并修改丢失/错误的许可证信息:
这使您可以在构建过程提交并获取新依赖项(及其各自的许可证)后立即处理这些更改/添加。
另一个关键区别是能够处理具有多个许可证的工件,其中只有一个许可证被批准而其他许可证不被批准。
你可以在这里阅读更多相关信息 -
http://wiki.jfrog.org/confluence/display/RTF/License+Control
答案 2 :(得分:0)
与Artifactory + Ivy + ant
一起使用的自定义解决方案是扫描每个模块以获取许可证信息。如果找到许可证,请在Artifactory中填充该许可证文件并更新它ivy.xml
以使其可用作已发布的工件。然后调用<ivy:retrieve/>
以获取许可证及其jar文件。
许可证可以在模块的ivy.xml
中指定为URL。在这种情况下,使用ant
的{{1}}任务下载许可证并将其写入文本文件。
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
的{{1}}任务提取许可证并将其写入文本文件。
ant
将许可证写为文本文件后,使用unjar
的{{3}}任务将许可证添加为工件。
[inside junit's .jar file as an example]
junit-4.8.2.jar/LICENSE.txt
将修改后的ant
和许可证发布回Artifactory。
[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
获取许可证及其jar文件。
<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>