簡體   English   中英

如何在Maven項目中添加70個本地jar?

[英]How to add 70 local jars on maven project?

當您擁有如此數量的本地罐子時,為什么還要使用Maven

因此,我們的客戶有很多私人罐子和定制罐子。 例如commons-lang MyCompanyCustom.jar,它是commons-lang.jar ,其中包含10個以上的類。

因此,在他們的環境中,我們使用100%Maven而沒有本地依賴項。 但是,在我們的站點上,我們具有可以在Eclipse中開發的jar,並且可以使用公共的jar構建Maven,但是我們無權將其jar添加到我們的組織存儲庫中。

因此,我們想使用Maven的優點,例如:編譯,測試,構建uber-jar,添加靜態代碼分析,生成java-docs,sources-jars等。不要在Eclipse的幫助下一一思考。

因此,我們有70個罐子,如果我對它們的環境有效,可以在Maven Central中找到50個罐子,但其中20個是我所謂的“自定義”罐子。 我當然搜索了決定,但發現了這一點:

<dependency>
    <groupId>sample</groupId>
    <artifactId>com.sample</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>

所以對於所有20個人,我必須在開發Maven個人資料中添加它? 有沒有像Gradle這樣的簡單方法,您可以在其中將所有具有其依賴項的文件夾添加到現有文件夾中?

在每個開發人員的存儲庫中一一安裝也是不可接受的。

請忘記前面提到的system范圍! 太麻煩了...

理想的情況是:

理想情況下,您所有的開發人員都可以訪問您所在組織或組織中的Repository Manager(如果可能)。

可能是您用於系統集成測試的中央環境?

或者,您可能擁有一個用於測試所有依賴項都在其中的集中環境。 這種方法可用於模擬編譯的工作方式,就像在客戶環境中一樣。 另外,您只需設置一次jar。

因此,在他們的環境中,我們使用100%Maven而沒有本地依賴項。 但是,在我們的站點上,我們具有可以在Eclipse中開發的jar,並且可以使用公共的jar構建Maven,但是我們無權將其jar添加到我們的組織存儲庫中。

根據您在上述摘錄中所說的,我相信您希望在客戶端安裝程序中存在依賴項的情況下,在構建的pom.xml中進行設置。

尤其是,正如您指出的那樣,該組織未授予您在存儲庫中添加其jar的權限,因此,我將使用provided范圍。

Maven文檔所述,提供的依賴項的定義如下:

這很像編譯,但是表明您希望JDK或容器在運行時提供依賴項。 例如,在為Java Enterprise Edition構建Web應用程序時,您將對Servlet API和相關Java EE API的依賴關系設置為提供的范圍,因為Web容器提供了這些類。 該作用域僅在編譯和測試類路徑上可用,並且不可傳遞。

因此,基本上,您假設這些依賴項將出現在客戶端的安裝程序中。 但是,這有一些限制。 這意味着您可以獨立構建解決方案,但無法在本地對其進行測試,因為您的工作站上沒有依賴項。

如果您甚至無法訪問jar來配置中央環境,請詢問您的客戶端是否可以提供DEV / SIT環境。

以上都不是? 繼承父pom。

為了避免對每個(相關)項目進行整個恆定的復制粘貼過程,maven提供了集中化依賴項和插件配置的工具,其中之一就是繼承父pom的配置。 如以下文檔中所述,這非常簡單:

  • 首先,創建一個僅帶有pom.xml的項目,在其中定義要集中化的所有內容(注意,某些項目的構造略有不同);
  • 使用選項pom作為包裝標簽的屬性: <packaging>pom</packaging> ;
  • 在必須繼承這些配置的pom中,在<parent> ... </parent>設置父配置標簽(此文檔非常清楚);
  • 現在,每次更新任何“全局” pom配置時,都必須在每個項目上更新父版本。 因此,您只需配置一次即可。

您還可以將其與上述解決方案一起應用,以這種方式結合在一起,以找到最適合您需求的解決方案。

但是那里有一個龐大的Maven世界,因此我建議您仔細閱讀其文檔,以進一步確認您的可能性。 我記得這些情況,因為我曾經遇到過類似的情況。

祝好運!

TL; DR: MavenHoe創建一個Maven存儲庫服務器 (不是目錄),該服務器從目錄中提供藝術品,並根據需要猜測您要的內容。 目的是避免復雜的版本同步-它只占用最接近請求的G:A:V的任何內容。

我已經將MavenHoe項目移至Github,該項目幾乎因Google Code的衰落而迷失了。 因此,我將其以完整答案的形式放在此處以供參考:

處理此類情況時,您可以選擇的一種方法是采用.jar形式的目錄形式的任何內容,並將其視為存儲庫。

前一段時間,我為此目的編寫了一個工具。 我的情況是我們正在構建JBoss EAP並重新編譯每個依賴項。 這導致了成千上萬個.jar文件,它們通常與它們的Central對應文件相同(加上安全性和錯誤修復)。

我需要針對這些工件而不是中央工件進行測試。 但是,Maven坐標相同。

因此,我編寫了這個“ Maven存儲庫/代理”,它在找到可能的東西時提供了工件,如果找不到,它將請求轉發給了Central。

它可以從三個來源得出G:A:V:

  1. MANIFEST.MF
  2. META-INF/.../pom.xml
  3. 該文件在目錄中的位置,並結合如下配置文件:

     jboss-managed.jar org/jboss/man/ jboss-managed 2.1.0.SP1 jboss-managed-2.1.0.SP1.jar getopt.jar gnu-getopt/ getopt 1.0.12-brew getopt-1.0.12-brew.jar jboss-kernel.jar org/jboss/microcontainer/ jboss-kernel 2.0.6.GA jboss-kernel-2.0.6.GA.jar jboss-logging-spi.jar org/jboss/logging/ jboss-logging-spi 2.1.0.GA jboss-logging-spi-2.1.0.GA.jar ... 

第一列是.zip中的文件名; 然后分別是groupId(帶有斜線或點),artifactId,版本,工件文件名。

您的70個文件將在此文件中列出。

在此頁面上查看更多信息:

https://rawgit.com/OndraZizka/MavenHoe/master/docs/README.html

該項目在這里可用。
如果您找不到更好的東西,請隨意叉起來並進一步推動。

另一個選擇是項目RepoTree

這個目錄從另一個僅包含.jar目錄創建一個Maven存儲庫目錄 (不是服務器)。 換句話說,它創建必要的.pom文件和目錄結構。 它僅考慮檔案中包含的元數據(MANIFEST.MF,pom.xml)中的精確信息。

用於將工件從目錄遞歸安裝到基於Aether 1.7的本地Maven存儲庫中的實用程序

這是5歲,但仍然可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM