使用Apache Archiva管理本地Maven存储库 - 许可

使用Apache Archiva管理本地Maven存储库 - 许可

问题描述:

我试图通过从零管理(本地lib文件夹)迁移到本地管理系统(Archiva)来重新获得对项目使用的依赖项的控制。使用Apache Archiva管理本地Maven存储库 - 许可

我们的每个依赖项都驻留在一个单独的目录中,与Archiva创建的结构类似。一个单独的目录包含依赖关系jar,源zip/jar,javadoc zip/jar和一个带有依赖关系许可证的文本文件。构建过程需要后者,因为最终产品需要包含第三方许可证目录,其中所有依赖许可证均以文件形式(而不是URL)形式收集。

我有(在阅读文档和试验/错误后)设法正确地upload所有依赖关系的工件,除了它的许可证。虽然表示许可证的txt文件已上传,但我无法理解应该如何表明这样的文件是依赖性许可证。

我试图通过license-maven-plugin编辑依赖的POM文件,包括许可信息,然后检索它在Maven的:

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.example</groupId> 
    <artifactId>example</artifactId> 
    <version>2.5.2</version> 

    <licenses> 
     <license> 
      <url>http://localhost:8282/archiva/repository/myrepo/org/example/example/2.5.2/example-2.5.2-LICENSE.txt</url> 
     </license> 
    </licenses> 
</project> 

但是,这是行不通的。如果我尝试这个,该插件会发出HTTP 401错误。

--- license-maven-plugin:1.14:download-licenses (download-licenses) @ maventest --- 
Unable to retrieve license for dependency: org.example:example 
http://localhost:8282/archiva/repository/myrepo/org/example/example/2.5.2/example-2.5.2-LICENSE.txt 
Server returned HTTP response code: 401 for URL: http://localhost:8282/archiva/repository/myrepo/org/example/example/2.5.2/example-2.5.2-LICENSE.txt 

这似乎有点不直观,我必须指定许可证的完整URL - 该文件是正确的有在服务器上旁边的相关JAR依赖和POM文件本身(和他们不都下载未经授权的错误) - 但这是参数需要的。似乎许可证预计将托管在一些公开的外部网站上,而不是存储库本身。

明确指出在过程工程项目POM的依赖,只要下载云:

<dependency> 
    <groupId>org.example</groupId> 
    <artifactId>example</artifactId> 
    <version>2.5.2</version> 
    <classifier>LICENSE</classifier> 
    <type>txt</type>   
</dependency> 

但是,这感觉不对 - 甚至不知道怎么一会引用它在建造过程中,为了复制到适当的地方。

如何正确处理由Archiva管理的存储库中的许可证工件?如何在他们的Maven项目中正确引用它们?

+0

首先,您所做的假设与特许有关的许可证文件是错误的...许可证是在pom文件本身中完成的信息...您可以使用maven插件将许可证作为构建结果以后...此外,我会建议使用像Nexus存储库经理 – khmarbaise

+0

@khmarbaise,我不明白你的意见。从我的角度来看,我所做的完全是你所描述的:在POM文件中指定许可证信息,稍后使用插件将它们收集为资源。我的问题中的最后一个XML代码片段仅仅是为了显示所需的文件确实在存储库中 - 我无法像预期的那样通过插件访问它。我已经计划看看Nexus,相当于Archiva。 – predi

Archiva中有一个特殊的Guest用户帐户,它不需要用户名和密码即可进行身份验证。默认情况下,它仅具有内置存储库(快照和内部)的Repository Observer访问权限,这些存储库随新的Archiva实例一起提供。 Repository Observer角色基本上是对存储库和其中的工件的读访问。

如果您想通过其完整URL读取自定义本地存储库中的随机文件而无需进行身份验证,则必须向访问用户添加相关存储库的Repository Observer权限。

这样做可以让我避开HTTP 401错误,并使许可证插件在我的情况下工作,所以我的POM文件是完全没问题的。

管理Guest(或任何其他用户)帐户的具体步骤在Manage Archiva Users(管理员指南的一部分)中进行了描述。

但仍不知道以这种方式处理许可证是否是一种好的做法。似乎让他们在一些偏远的位置是首选的,我假设它基于POM文件中的<licenses>属性的结构(仅限url,没有相对路径)。