10

我想知道Nexus 存储库管理器是否包含像 Artifactory 这样的许可证管理器(使用此插件:http ://wiki.jfrog.org/confluence/display/RTF/License+Control )。

如果无法通过插件在 Nexus 中执行此操作,您如何管理项目依赖项的许可证(使用 maven)?

例如,对于商业项目,我不能将 GPL 库包含到最终工件(.jar、.war 等)中。

4

3 回答 3

7

可以使用 Maven 许可证验证器插件模拟 Artifactory 功能

http://code.google.com/p/maven-license-validator-plugin/

这两种方法的实际问题是,很少有 Maven Central 模块在其 POM 中具有最新的许可证信息。因此,据我所知,这是一个绝妙的主意,但它并不能真正解决评估构建的许可证合规性问题...

我理想的解决方案是一组外部进程,它们扫描 Nexus 存储库的内容以获取可用的许可证信息。然后,此信息用于播种 Nexus Professional 的采购套件,以控制已批准存储库的内容以用于发布(非开发构建)。

一些二进制文件包含文本许可文件,或者也可以扫描相关的源代码包以获取许可和 IP 信息。许多第三方工具可用于执行此任务。我一直在考虑的有:

总之,在 Maven Central 能够提供关于模块许可的可靠元数据之前,我认为这个问题的解决方案将保持高度定制化和次优

于 2011-07-11T18:40:16.787 回答
1

Artifactory 采用的方法有点不同,因为原始工件元数据仅用作起点,但最终用户可以完成和修改丢失/不正确的许可证信息:

  1. 首先,使用 POM(包括所有父 POM)或 Ivy 描述符来提取启发式许可证信息。此自动发现步骤完全是可选的。
  2. 然后,此许可证信息会根据其校验和附加到工件上,并且用户可以完全编辑。管理员可以更新许可证详细信息,这些详细信息将在工件的整个生命周期内保持不变。
  3. 每个许可证都可以根据全球政策获得批准或不批准。
  4. 在部署时,会读取所有依赖项的许可证信息 - 如果发现未经批准或未知的许可证,则会将包含该信息的电子邮件警报发送到预配置的地址。

这使您可以在构建过程提交和拾取新依赖项(及其各自的许可证)后立即处理它们的更改/添加。

另一个关键区别是处理具有多个许可证的工件的能力,其中只有一个许可证获得批准,而其他许可证则没有。

你可以在这里读更多关于它的内容 -

http://wiki.jfrog.org/confluence/display/RTF/License+Control

于 2011-09-26T08:49:33.277 回答
0

与 Artifactory + Ivy + 一起使用的定制解决方案ant是扫描每个模块以获取许可证信息。如果找到许可证,则在 Artifactory 中填充该许可证文件并更新它ivy.xml以使其作为已发布的工件可用。然后调用<ivy:retrieve/>以获取许可证及其 jar 文件。

可以在模块的ivy.xmlURL 中指定许可证。在这种情况下,使用antget任务下载许可证并将其写入文本文件。

[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文件中。在这种情况下,使用antunjar任务来提取许可证并将其写入文本文件。

[inside junit's .jar file as an example]
 junit-4.8.2.jar/LICENSE.txt

将许可证写成文本文件后,使用antxmltask任务将许可证添加为工件。

[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" />
于 2012-06-22T00:47:35.613 回答