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

时间:2017-10-11 08:58:59

标签: java maven licensing archiva

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

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

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

我尝试编辑依赖项的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>

但这不起作用。如果我尝试这个,插件会发出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项目中正确引用它们?

1 个答案:

答案 0 :(得分:0)

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

如果要通过其完整URL读取自定义本地存储库中的随机文件而无需进行身份验证,则必须将有问题的存储库的Repository Observer权限添加到Guest用户。

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

管理员指南的一部分Manage Archiva Users中介绍了管理访客(或任何其他用户)帐户的确切步骤。

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