Hosting repozytorium Maven na GitHubie

Mam fork małej biblioteki open source, nad którą pracuję na GitHubie. Chciałbym udostępnić go innym programistom za pośrednictwem Mavena, ale nie chcę uruchamiać własnego serwera Nexus, a ponieważ jest to fork, nie mogę go łatwo wdrożyć do oss.sonatype.org.

To, co chciałbym zrobić, to wdrożyć go na GitHubie, aby inni mogli uzyskać do niego dostęp za pomocą Mavena. Jak najlepiej to zrobić?

Author: MozenRath, 2012-12-23

6 answers

Najlepsze rozwiązanie, jakie udało mi się znaleźć, składa się z następujących kroków:

  1. Utwórz gałąź o nazwie mvn-repo do hostowania artefaktów Mavena.
  2. użyj wtyczki github site-maven-plugin, aby wypchnąć swoje artefakty na github.
  3. Skonfiguruj Mavena tak, aby używał zdalnego mvn-repo jako repozytorium Mavena.
Zastosowanie tego podejścia ma wiele zalet:]}
    Artefakty Mavena są przechowywane oddzielnie od Twojego źródła w oddzielnej gałęzi o nazwie]}, podobnie jak github pages są przechowywane w oddzielnej gałęzi o nazwie gh-pages (Jeśli używasz github pages)
  • W przeciwieństwie do innych proponowanych rozwiązań, nie koliduje z Twoim gh-pages, jeśli ich używasz.
  • łączy się naturalnie z celem wdrożenia, więc nie ma nowych poleceń Mavena do nauczenia się. Po prostu użyj mvn deploy tak, jak zwykle

Typowy sposób wdrażania artefaktów do zdalnego repo Mavena polega na użyciu mvn deploy, więc załączmy ten mechanizm w tym celu rozwiązanie.

Najpierw powiedz mavenowi, aby rozmieścił artefakty w tymczasowej lokalizacji wewnątrz katalogu docelowego. Dodaj to do swojego pom.xml:

<distributionManagement>
    <repository>
        <id>internal.repo</id>
        <name>Temporary Staging Repository</name>
        <url>file://${project.build.directory}/mvn-repo</url>
    </repository>
</distributionManagement>

<plugins>
    <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.8.1</version>
        <configuration>
            <altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository>
        </configuration>
    </plugin>
</plugins>

Teraz spróbuj uruchomić mvn clean deploy. Zobaczysz, że zainstalowało Twoje repozytorium maven do target/mvn-repo. Następnym krokiem jest wysłanie tego katalogu na GitHub.

Dodaj swoje informacje uwierzytelniające do ~/.m2/settings.xml, aby github site-maven-plugin mógł nacisnąć na GitHub:

<!-- NOTE: MAKE SURE THAT settings.xml IS NOT WORLD READABLE! -->
<settings>
  <servers>
    <server>
      <id>github</id>
      <username>YOUR-USERNAME</username>
      <password>YOUR-PASSWORD</password>
    </server>
  </servers>
</settings>

(Jak wspomniano, upewnij się, że chmod 700 settings.xml aby upewnić się, że nikt może odczytać hasło w pliku. Jeśli ktoś wie, jak zrobić site-maven-plugin monit o hasło zamiast wymagać go w pliku konfiguracyjnym, daj mi znać.)

Następnie powiedz GitHub site-maven-plugin o nowym serwerze, który właśnie skonfigurowałeś, dodając do pom:

<properties>
    <!-- github server corresponds to entry in ~/.m2/settings.xml -->
    <github.global.server>github</github.global.server>
</properties>
Na koniec skonfiguruj site-maven-plugin, aby przesłać z tymczasowego repo do gałęzi mvn-repo na Githubie:
<build>
    <plugins>
        <plugin>
            <groupId>com.github.github</groupId>
            <artifactId>site-maven-plugin</artifactId>
            <version>0.11</version>
            <configuration>
                <message>Maven artifacts for ${project.version}</message>  <!-- git commit message -->
                <noJekyll>true</noJekyll>                                  <!-- disable webpage processing -->
                <outputDirectory>${project.build.directory}/mvn-repo</outputDirectory> <!-- matches distribution management repository url above -->
                <branch>refs/heads/mvn-repo</branch>                       <!-- remote branch name -->
                <includes><include>**/*</include></includes>
                <repositoryName>YOUR-REPOSITORY-NAME</repositoryName>      <!-- github repo name -->
                <repositoryOwner>YOUR-GITHUB-USERNAME</repositoryOwner>    <!-- github username  -->
            </configuration>
            <executions>
              <!-- run site-maven-plugin's 'site' target as part of the build's normal 'deploy' phase -->
              <execution>
                <goals>
                  <goal>site</goal>
                </goals>
                <phase>deploy</phase>
              </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Gałąź mvn-repo nie musi istnieć, zostanie utworzona dla ty.

A teraz biegnij mvn clean deploy Jeszcze raz. Powinieneś zobaczyć maven-deploy-plugin "upload" pliki do lokalnego repozytorium w katalogu docelowym, a następnie site-maven-plugin zatwierdzający te pliki i pchający je na serwer.

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building DaoCore 1.3-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ greendao ---
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.jar (77 KB at 2936.9 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.pom (3 KB at 1402.3 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/maven-metadata.xml (768 B at 150.0 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/maven-metadata.xml (282 B at 91.8 KB/sec)
[INFO] 
[INFO] --- site-maven-plugin:0.7:site (default) @ greendao ---
[INFO] Creating 24 blobs
[INFO] Creating tree with 25 blob entries
[INFO] Creating commit with SHA-1: 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] Updating reference refs/heads/mvn-repo from ab7afb9a228bf33d9e04db39d178f96a7a225593 to 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.595s
[INFO] Finished at: Sun Dec 23 11:23:03 MST 2012
[INFO] Final Memory: 9M/81M
[INFO] ------------------------------------------------------------------------

Wizyta github.com w przeglądarce Wybierz gałąź mvn-repo i sprawdź, czy wszystkie pliki binarne już tam są.

Tutaj wpisz opis obrazka

Gratulacje!

Możesz teraz rozmieścić swoje artefakty maven dla biednego człowieka repo po prostu uruchamiając mvn clean deploy.

Jest jeszcze jeden krok, który musisz wykonać, to skonfigurować pomy, które zależą od Twojego pom, aby wiedzieć, gdzie znajduje się Twoje repozytorium. Dodaj następujący fragment do pom projektu, który zależy od Twojego projektu:

<repositories>
    <repository>
        <id>YOUR-PROJECT-NAME-mvn-repo</id>
        <url>https://raw.github.com/YOUR-USERNAME/YOUR-PROJECT-NAME/mvn-repo/</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
    </repository>
</repositories>

Teraz każdy projekt, który wymaga plików jar automatycznie pobierze je z repozytorium github maven.

Edit: aby uniknąć problemu wymienionego w komentarzach ('Error creating commit: Invalid request. Na 'properties / name', nil nie jest ciągiem znaków.'), upewnij się, że podałeś nazwę w swoim profilu na github.

 446
Author: emmby,
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
2016-06-13 14:49:03

Nie używaj Githuba jako repozytorium Maven.

Edit: ta opcja dostaje dużo głosów w dół, ale nie ma komentarzy, dlaczego. Jest to właściwa opcja, niezależnie od możliwości technicznych, aby faktycznie hostować na Githubie. Hosting na GitHub jest zły ze wszystkich powodów opisanych poniżej i bez komentarzy nie mogę poprawić odpowiedzi, aby wyjaśnić twoje problemy.

Najlepsza opcja-Współpraca z oryginalnym projektem

Najlepszą opcją jest przekonanie oryginalny projekt, aby uwzględnić zmiany i trzymać się oryginału.

Alternatywa-utrzymuj własny widelec

Ponieważ masz rozwidloną bibliotekę open source, a Twój fork jest również open source, możesz przesłać swój fork do Maven Central (przeczytaj Przewodnik po przesyłaniu artefaktów do Centralnego Repozytorium ), nadając mu nową groupId i być może nową artifactId.

Rozważ tę opcję Tylko, jeśli chcesz utrzymać ten widelec do czasu zmian włączone do oryginalnego projektu, a następnie należy porzucić ten.

Naprawdę zastanów się, czy widelec jest właściwą opcją. Przeczytaj niezliczone wyniki Google dla 'why not to fork'

Rozumowanie

Rozszerzanie repozytorium za pomocą słoików zwiększa rozmiar pobierania bez żadnych korzyści

Jar jest output twojego projektu, może być w każdej chwili zregenerowany z inputs, a Twój repo GitHub powinien zawierać tylko inputs.

Nie wierzysz mi? Następnie sprawdź wyniki Google dla 'dont store binaries in git' .

Pomoc Githuba w pracy z dużymi plikami powie Ci to samo. Co prawda jar nie jest duży, ale jest większy niż kod źródłowy i gdy jar został stworzony przez wydanie, nie ma powodu do wersjonowania - po to jest nowe wydanie.

Definiowanie wielu transakcji repo w Twoim pom.xml spowalnia kompilację o liczbę repozytoriów razy Ilość Artefakty

Stephen Connolly mówi :

Jeśli ktoś doda repo, ma wpływ na jego wydajność kompilacji ponieważ mają teraz inny repo do sprawdzenia artefaktów... To nic wielkiego. problem, jeśli musisz dodać tylko jeden repo... Ale problem rośnie i następny wiesz, że Twój Maven build sprawdza 50 repo pod kątem każdego artefaktu i czas budowy to pies.

Zgadza się! Maven musi sprawdzić każdy artefakt (i jego zależności) zdefiniowany w Twoim pom.xml dla każdego zdefiniowanego repozytorium , ponieważ nowsza wersja może być dostępna w każdym z tych repozytoriów.

Wypróbuj to dla siebie, a poczujesz ból powolnej budowy.

Najlepsze miejsce na Artefakty znajduje się w Maven Central, ponieważ jest to centralne miejsce na słoiki, a to oznacza, że Twoja konstrukcja sprawdzi tylkojedno miejsce .

Więcej o repozytoriach można przeczytać w dokumentacji Mavena na Wprowadzenie do Repozytoria

 109
Author: Bae,
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-01-28 01:59:05

Możesz użyć JitPack, aby ujawnić swoje repozytorium GitHub jako artefakt Mavena. To bardzo proste. Twoi użytkownicy będą musieli dodać to do swojego pom.xml:

  1. dodaj repozytorium:
<repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
</repository>
  1. Dodaj zależność:
<dependency>
    <groupId>com.github.User</groupId>
    <artifactId>Repo name</artifactId>
    <version>Release tag</version>
</dependency>

Jak odpowiedziałgdzie indziej pomysł jest taki, że JitPack zbuduje Twoje repo GitHub i poda słoiki. Wymaganiem jest posiadanie pliku kompilacji i Wydania GitHub.

Fajne jest to, że nie musisz sobie z tym radzić wdrażanie i przesyłanie. Ponieważ nie chcesz utrzymywać własnego repozytorium artefaktów, jest to dobre dopasowanie do Twoich potrzeb.

 36
Author: Andrejs,
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 10:31:38

Inną alternatywą jest użycie dowolnego hostingu z obsługą webdav. Oczywiście będziesz potrzebował trochę miejsca na to gdzieś, ale jest to proste w konfiguracji i dobra alternatywa dla uruchomienia pełnego serwera nexus.

Dodaj to do sekcji budowania

     <extensions>
        <extension>
        <artifactId>wagon-webdav-jackrabbit</artifactId>
        <groupId>org.apache.maven.wagon</groupId>
        <version>2.2</version>
        </extension>
    </extensions>

Dodaj coś takiego do sekcji distributionManagement

<repository>
    <id>release.repo</id>
    <url>dav:http://repo.jillesvangurp.com/releases/</url>
</repository>

Na koniec upewnij się, że ustawiłeś dostęp do repozytorium w Ustawieniach.xml

Dodaj to do swoich serwerów sekcja

    <server>
        <id>release.repo</id>
        <username>xxxx</username>
        <password>xxxx</password>
    </server>

I definicja do sekcji repozytoriów

            <repository>
                <id>release.repo</id>
                <url>http://repo.jillesvangurp.com/releases</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>

Wreszcie, jeśli masz jakiś standardowy hosting php, możesz użyć czegoś takiego jak sabredav, aby dodać możliwości webdav.

Zalety: masz własne repozytorium maven Minusy: nie masz żadnych możliwości zarządzania w Nexusie; potrzebujesz gdzieś konfiguracji webdav

 8
Author: Jilles van Gurp,
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
2013-09-27 13:49:10

Jako alternatywę, Bintray zapewnia darmowy hosting repozytoriów maven. Jest to prawdopodobnie dobra alternatywa dla Sonatype OSS i Maven Central, jeśli absolutnie nie chcesz zmieniać nazwy groupId. Ale proszę, przynajmniej Postaraj się zintegrować swoje zmiany pod prąd lub zmień nazwę i opublikuj na Central. To znacznie ułatwia innym korzystanie z widelca.

 7
Author: Guillaume,
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-08-24 13:00:26

Jeśli masz tylko aar LUB jar sam plik, lub po prostu nie chcesz używać wtyczek-stworzyłem prosty skrypt powłoki. Możesz osiągnąć to samo-publikować swoje artefakty na Githubie i używać go jako publicznego repo Mavena.

 0
Author: Orest Savchak,
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-10-09 20:58:41