[英]Maven private remote repository setup
我正在嘗試為我們的團隊建立一個私人遠程存儲庫。 現在存儲庫提供以下服務,到目前為止我已經嘗試過 -
當發出' mvn compile '時,它會搜索“〜/ .m2”中的依賴項。 如果在那里找不到它,那么它將進入遠程私有存儲庫,當依賴關系仍然不存在時,它將進入中央存儲庫。
在編譯之前,我必須將所有依賴項與校驗和和元數據一起放在我們的私有(和遠程)存儲庫中。
當我們需要一個工件(例如 - spring-mvc)時,我們需要將它與該工件的所有依賴項(spring-mvc)一起放在遠程私有存儲庫中。 在這種情況下,從我們的遠程私有存儲庫下載“spring-mvc”。 但是,“spring-mvc”的依賴關系不會從我們的遠程私有存儲庫下載。 它們從中央存儲庫下載。
現在我要做的是 -
以這樣一種方式配置專用遠程存儲庫“R”,即我不必手動將所有依賴項放入其中。 當首先發出“mvn編譯”時; 在“〜/ .m2”中搜索依賴項,如果沒有找到,則它將轉到私有遠程存儲庫“R”。 如果在'R'中找到依賴關系,那么“〜/ .m2”將從'R'獲得它。 如果在'R'中找不到依賴關系,則從中央存儲庫下載這些依賴關系,並將依賴關系保存在'R'中以供進一步使用。 之后'〜/ .m2'將從'R'獲得它們。 在這里,我不需要手動將依賴項放在我們的遠程私有存儲庫“R”中。
'〜/ .m2'將從遠程私有存儲庫'R'獲取“spring-mvc”(這是我項目的pom.xml中提到的主要依賴項)的所有依賴項,並且'R'將從相應的中央存儲庫獲取它們。
任何人都可以建議某種方式/或教程參考以滿足上述兩個目標嗎? 提前致謝。
編輯:我嘗試過Nathaniel Waisbrot的回答和nexus-2.7.0-06-bundle。 經過幾個小時的努力,我可以在使用jre-7時進行設置。 使用jre-6,無法啟動nexus。 但我們的項目是使用JDK-6部署的。 我們不想改變當前的jre
版本。 用jre-6 apache-archiva
就行了。 但我不確定我是否能夠實現上一節中的所有目標。 是否有任何archiva
用戶/專家可以告訴我我是否可以在上一節中實現這些目標?
我已經設置了nexus
用於鏡像我的maven本地存儲庫(在~/.m2/repository.
)由於這篇文章仍然被很多人訪問過,我認為如果我分享如何將nexus
配置為存儲庫,這將對其他人有所幫助經理。 這個程序在Ubuntu 12.04
非常適合我。 這里是 -
1.下載nexus-2.11.1-01-bundle.tar.gz或最新版本的nexus oss。
2.解壓縮您主目錄中的tar文件 -
$ tar -xvf nexus-2.11.1-01-bundle.tar.gz
現在,您將在主目錄中獲得兩個目錄 - nexus-2.11.1-01
和sonatype-work
。
3.將這兩個目錄復制到/usr/local/
目錄(可以將它們復制到其他地方) -
$ cp -r nexus-2.11.1-01 /usr/local/
$ cp -r sonatype-work /usr/local/
與nexus相關的可執行文件/配置文件存儲在nexus-2.11.1-01
目錄中, pom.xml
中提到的jar文件存儲在sonatype-work
目錄中。
這些jar文件是~/.m2/repository
鏡像。 第一次發出mvn package
命令時,所有jar
都存儲在這里。 然后,當您再次發出mvn package
時,所有jar都從nexus存儲庫下載,而不是從中央存儲庫下載。
4.轉到/usr/local/
目錄 -
$ cd /usr/local/
5.創建一個指向nexus-2.11.1-01
的鏈接 -
$ sudo ln -s nexus-2.7.0-06 nexus
6.現在在終端中運行nexus類型 -
$ bash nexus/bin/nexus console
這里nexus與您的控制台相連。 如果關閉控制台,則nexus服務器將被終止。 當您嘗試為Ubuntu服務器計算機運行nexus時,您可以使用屏幕。
注意:嘗試使用上面的命令運行nexus時可能會出現2個問題。 如果您沒有發現任何問題,請跳過下面的2個步驟(步驟7和8)
7.由於許可不足,可能會出現第一個問題。 閱讀錯誤消息並采取必要步驟。 但作為一種快速解決方案,您可以這樣做 -
$ sudo chmod -R 777 nexus-2.11.1-01/
$ sudo chmod -R 777 sonatype-work/
8.如果您使用的任何jdk
版本低於java 7,則可能會顯示以下錯誤消息 -
包裝| 啟動JVM ...包裝器| 加載應用程序時JVM退出。 jvm 1 | 線程“main”中的異常java.lang.UnsupportedClassVersionError:org / sonatype / nexus / bootstrap / jsw / JswLauncher:不支持的major.minor版本51.0
在這種情況下,使用jdk7來運行步驟6中提到的命令。在ubuntu中它非常簡單。 假設你有兩個jdk - jdk6和jdk7。 您的項目在jdk6上運行。 然后只有運行nexus你可以從終端執行此操作(假設您的jdk7位於/usr/lib/jvm/jdk1.7.0_45
目錄中) -
$ export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
$ export PATH=$JAVA_HOME/bin:$PATH
9.現在在瀏覽器中鍵入地址 - http:// localhost:8081 / nexus / 。 如果步驟1到6(如果發生錯誤,然后是步驟1到8)完美地完成,您可以成功找到登錄屏幕。 默認登錄用戶名是 - admin ,密碼是 - admin123
10.停止連接。 只需關閉終端或在步驟6的終端按Ctrl + C. 在你~/.m2
目錄下創建一個名為 - settings.xml
的空文件。 將以下內容復制到此settings.xml
文件中 -
<settings>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
11.在項目的pom.xml
文件中添加以下這些行 -
<distributionManagement>
<snapshotRepository>
<id>my-snapshots</id>
<name>My internal repository</name>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>my-releases</id>
<name>My internal repository</name>
<url>http://localhost:8081/nexus/content/repositories/releases</url>
</repository>
</distributionManagement>
Sonatype Nexus可以滿足您的所有需求,只需要很少的配置就可以滿足您的要求,而且界面也很棒。 在“ Maven內部存儲庫,問題真的很難嗎? ”下的基本設置有一些細節。
基本上,您可以將Nexus設置為緩存存儲庫:您的Maven客戶端將只訪問內部存儲庫。 當內部存儲庫找不到工件時,它會轉到Central(或您定義的任何其他外部存儲庫),為您提取它,並將其存儲以供日后使用。
這很酷,因為如果你想從一個依賴於抓取的依賴關系 - 你想要的免費轉換到一個鎖定的環境,Nexus讓它變得簡單。 您將其設置為從中央提取,從干凈的計算機運行您的構建(強制Nexus攝取所有當前的Central依賴項),然后關閉代理 - repo功能(因此任何新的/更改的依賴項將由devops管理)。
您所描述的幾乎是大多數存儲庫管理器的默認配置,包括Archiva。 以下是否有助於將其設置為使用Maven?
http://archiva.apache.org/docs/1.3.6/userguide/using-repository.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.