2017-10-11 103 views
0

我試圖通過從零管理(本地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

回答

0

Archiva中有一個特殊的Guest用戶帳戶,它不需要用戶名和密碼即可進行身份驗證。默認情況下,它僅具有內置存儲庫(快照和內部)的Repository Observer訪問權限,這些存儲庫隨新的Archiva實例一起提供。 Repository Observer角色基本上是對存儲庫和其中的工件的讀訪問。

如果您想通過其完整URL讀取自定義本地存儲庫中的隨機文件而無需進行身份驗證,則必須向訪問用戶添加相關存儲庫的Repository Observer權限。

這樣做可以讓我避開HTTP 401錯誤,並使許可證插件在我的情況下工作,所以我的POM文件是完全沒問題的。

管理Guest(或任何其他用戶)帳戶的具體步驟在Manage Archiva Users(管理員指南的一部分)中進行了描述。

但仍不知道以這種方式處理許可證是否是一種好的做法。似乎讓他們在一些偏遠的位置是首選的,我假設它基於POM文件中的<licenses>屬性的結構(僅限url,沒有相對路徑)。