使用Apache Archiva许可证管理本地maven存储库



我正试图通过从零管理(本地lib文件夹)迁移到本地管理的系统(Archiva)来重新控制我们项目使用的依赖项。

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

我(在阅读了文档和试用/错误之后)成功地上传了一个依赖项的所有工件,除了它的许可证。当代表许可证的txt文件被上传时,我不明白如何表明这样的文件是dependency的许可证。

我尝试编辑依赖项的POM文件以包含许可信息,然后通过license-maven-plugin:在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>

但这并不奏效。如果我尝试这样做,插件会喷出HTTP401错误。

--- 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项目中正确地引用它们?

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

如果您想通过自定义本地存储库中的完整URL读取随机文件而无需进行身份验证,则必须向Guest用户添加有问题存储库的存储库观察员权限。

这样做可以避免HTTP401错误,并使许可插件在我的情况下工作,所以我的POM文件完全可以。

管理Guest(或任何其他用户)帐户的具体步骤在《管理员指南》的"管理Archiva用户"一节中进行了描述。

然而,仍然不知道以这种方式处理许可证是否是一种好的做法。似乎最好将它们保存在某个远程位置,我假设这是基于POM文件中<licenses>属性的结构(仅url,没有相对路径)。

最新更新