簡體   English   中英

Maven私有遠程存儲庫設置

[英]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-01sonatype-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.

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