Maven private remote repozytorium setup

Próbuję założyć prywatne zdalne repozytorium dla naszego zespołu. Teraz repozytorium służy następujący z dotychczas próbowałem -

  • Po wydaniu' MVN compile ', przeszukuje zależności w "~/.m2". Jeśli nie zostanie tam znaleziony, to trafi do zdalnego prywatnego repozytorium, a gdy nie ma tu zależności, trafi do centralnego repozytorium.

  • Przed kompilacją muszę umieścić wszystkie zależności w naszym prywatnym (i zdalne) repozytorium wraz z sumą kontrolną i metadanymi.

  • Gdy potrzebujemy artefaktu (np.-spring-mvc), musimy umieścić go w zdalnym prywatnym repozytorium wraz ze wszystkimi zależnościami tego artefaktu (spring-mvc). W tym przypadku "spring-mvc" jest pobierany z naszego zdalnego prywatnego repozytorium. Ale zależności "spring-mvc" nie są pobierane z naszego zdalnego prywatnego repozytorium. Są one pobierane z centralnego repozytorium.

Teraz to, co próbuję zrobić, to -

  • Skonfigurowanie prywatnego zdalnego repozytorium 'R' w taki sposób, że nie muszę ręcznie umieszczać w nim wszystkich zależności. Gdy wydano "mvn compile", to przede wszystkim; zależności są wyszukiwane w"~/.m2 "jeśli nie znaleziono, to trafia do prywatnego zdalnego repozytorium 'R'. Jeśli zależności znajdują się w 'R', to"~/.m2 "dostanie od "R". Jeśli zależności Nie znajdują się w 'R', to zależności te są pobierane z centralnych repozytoriów i zachowują zależności W "R" do dalszych zastosowań. Po tym '~/.m2 "dostanie je od "R". Tutaj nie muszę ręcznie umieszczać zależności w naszym zdalnym prywatnym repozytorium 'R'.

  • '~/.m2 'otrzyma wszystkie zależności" spring-mvc " (które są główną zależnością wymienioną w pom mojego projektu.xml) ze zdalnego prywatnego repozytorium ' R ' i 'R' pobierają je z odpowiedniego centralnego repozytorium.

Czy ktoś może zasugerować jakiś sposób / lub tutorial w odniesieniu do spełnienia tych dwa nad celami? Z góry dzięki.

EDIT: próbowałem zNathaniel Waisbrot 's answer i nexus-2.7.0-06- / align = "left" / Po wielu godzinach starań jestem w stanie go skonfigurować, gdy używam jre-7. W jre-6 nie można uruchomić Nexusa. Ale nasz projekt jest wdrożony z JDK-6. Nie chcemy zmieniać bieżącej wersji jre. Z jre-6 apache-archiva jest OK. Ale nie jestem pewien, czy mogę osiągnąć wszystkie cele w poprzedniej sekcji. Czy jest jakiś archiva Użytkownik / ekspert, który może powiedz mi, Czy mogę osiągnąć te cele w poprzedniej sekcji?

Author: Razib, 2014-01-02

3 answers

Mam setup nexus dla mirroring moje lokalne repozytorium maven (at ~/.m2/repository.) ponieważ ten post jest nadal odwiedzany przez wiele osób, myślę, że byłoby pomocne dla innych, jeśli podzielę się tym, jak skonfigurowałem nexus jako menedżer repozytoriów. Ta procedura Działa dla mnie doskonale W Ubuntu 12.04. Tutaj jest -

1. Pobierz nexus-2.11.1-01- / align = "left" / smoła.gz lub najnowsza wersja Nexus oss.

2. rozpakuj plik tar w domu katalog -

$ tar -xvf nexus-2.11.1-01-bundle.tar.gz

Teraz otrzymasz dwa katalogi - nexus-2.11.1-01 i sonatype-work w swoim katalogu domowym.

3. skopiuj te dwa katalogi do /usr/local/ katalog (mogą być kopiowane w inne miejsce) -

$ cp -r nexus-2.11.1-01 /usr/local/
$ cp -r sonatype-work /usr/local/

Pliki wykonywalne / konfiguracyjne związane z Nexusem są przechowywane w katalogu nexus-2.11.1-01, a plik JAR wymieniony w pom.xml jest przechowywany w katalogu sonatype-work.
Te pliki jar są zwierciadłem twojego ~/.m2/repository. Przy pierwszym wydaniu polecenia mvn package następnie wszystkie jarS są przechowywane tutaj. Następnie, gdy ponownie wydasz mvn package, wszystkie słoiki są pobierane z repozytorium nexus zamiast pobierać z centralnego repozytorium.

4. przejdź do katalogu /usr/local/ -

$ cd /usr/local/  

5. Utwórz link do nexus-2.11.1-01 -

$ sudo ln -s nexus-2.7.0-06 nexus

6. teraz, aby uruchomić nexus wpisz następujące w terminalu -

$ bash nexus/bin/nexus console  

Tutaj nexus jest dołączony do Twojej konsoli. Jeśli zamkniesz konsolę to nexus serwer zostanie zakończony. Gdy próbujesz uruchomić nexus na komputerze Ubuntu server, możesz użyć ekranu .

Uwaga: podczas próby uruchomienia Nexusa za pomocą powyższego polecenia mogą wystąpić 2 problemy. Jeśli nie znalazłeś żadnego problemu, pomiń następne 2 kroki (Krok - 7 i 8)

7. pierwszy problem może wystąpić z powodu niewystarczającej zgody. Przeczytaj komunikat o błędzie i podejmij niezbędne kroki. Ale jako szybkie rozwiązanie możesz to zrobić -

$ sudo chmod -R 777 nexus-2.11.1-01/
$ sudo chmod -R 777 sonatype-work/

8. jeśli używasz dowolnej wersji jdk niższej niż java 7, może pojawić się następujący komunikat o błędzie -

Wrapper / uruchamianie JVM... wrapper / JVM wyłączony podczas ładowania podanie. JVM 1 | wyjątek w wątku " main" java.lang.UnsupportedClassVersionError: org / sonatype/nexus/bootstrap/jsw / JswLauncher : nieobsługiwany major.drobne wersja 51.0

W tym przypadku użyj jdk7, aby uruchomić polecenie wymienione w kroku 6. W ubuntu to całkiem proste. Zakładając, że masz dwa jdk-jdk6 i jdk7. Twój projekt działa na jdk6. Wtedy tylko dla uruchomienia Nexusa możesz to zrobić ze swojego terminala (zakładając jdk7 w katalogu /usr/lib/jvm/jdk1.7.0_45) -

$ export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
$ export PATH=$JAVA_HOME/bin:$PATH  

9. teraz w przeglądarce wpisz adres - http://localhost:8081/nexus/. Jeśli Krok 1 do 6 (jeśli wystąpiły błędy, a następnie krok 1 do 8) zostaną wykonane perfekcyjnie, możesz z powodzeniem znaleźć Ekran logowania. Domyślna nazwa użytkownika logowania to - admin oraz hasło to - admin123

10. Stop nexus. Wystarczy zamknąć terminal lub nacisnąć Ctrl + C na terminalu kroku 6. W katalogu ~/.m2 Utwórz pusty plik o nazwie - settings.xml. Skopiuj następującą treść do tego pliku 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. i dodać te następujące linie w pliku pom.xml projektu-

<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>
 41
Author: Razib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-27 07:05:08

Sonatype Nexus robi wszystko, co chcesz, potrzebuje bardzo małej konfiguracji do tego, o co prosisz, i ma ładny interfejs. Jest kilka szczegółów na temat podstawowej konfiguracji pod pytaniem "Maven Internal repozytorium, czy to naprawdę takie trudne?"

Zasadniczo możesz skonfigurować Nexus jako repozytorium buforujące: twój Klient Maven będzie odwiedzał tylko wewnętrzne repozytorium. Gdy wewnętrzne repozytorium nie może znaleźć artefaktu, przechodzi do centralnego (lub innych zewnętrznych repozytoriów define), pobiera go dla Ciebie i przechowuje na później.

To jest fajne, ponieważ jeśli chcesz przejść z chwytania-dowolnych-zależności-które-chcesz-free-for-all do zamkniętego środowiska, Nexus ułatwia to. Skonfigurowałeś go tak, aby pobierał z Central, uruchamiał kompilację z czystej maszyny (zmuszając Nexusa do pobierania wszystkich bieżących zależności centralnych), a następnie wyłącz funkcję proxy-repo (więc wszelkie nowe / zmienione zależności będą zarządzane przez devops).

 8
Author: Nathaniel Waisbrot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:45

To, co opisałeś, jest domyślną konfiguracją większości menedżerów repozytoriów, w tym Archiv. Czy poniższe wskazówki pomagają w skonfigurowaniu go do użycia z Maven?

Http://archiva.apache.org/docs/1.3.6/userguide/using-repository.html

 4
Author: Brett Porter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-05 23:02:10