Mam widelec małej biblioteki o otwartym źródle, nad którą pracuję nad github. Chciałbym udostępnić go innym programistom za pośrednictwem maven, ale nie chcę uruchamiać własnego serwera Nexus, a ponieważ jest to rozwidlenie, nie mogę go łatwo wdrożyć na oss.sonatype.org.
Chciałbym wdrożyć go na github, aby inni mogli uzyskać do niego dostęp za pomocą maven. Jak najlepiej to zrobić?
maven
github
github-pages
mvn-repo
emmby
źródło
źródło
Odpowiedzi:
Najlepsze rozwiązanie, jakie udało mi się znaleźć, składa się z następujących kroków:
mvn-repo
do przechowywania artefaktów raju.mvn-repo
jako repozytorium maven.Korzystanie z tego podejścia ma kilka zalet:
mvn-repo
, podobnie jak strony github są przechowywane w osobnej gałęzi o nazwiegh-pages
(jeśli używasz stron github)gh-pages
jeśli ich używasz.mvn deploy
jak zwykleTypowym sposobem rozmieszczania artefaktów w zdalnym repozytorium maven jest użycie
mvn deploy
, więc załatajmy ten mechanizm dla tego rozwiązania.Najpierw powiedz maven, aby rozmieścił artefakty w tymczasowej lokalizacji przemieszczania w katalogu docelowym. Dodaj to do
pom.xml
:Teraz spróbuj uruchomić
mvn clean deploy
. Zobaczysz, że wdrożył twoje repozytorium maven dotarget/mvn-repo
. Następnym krokiem jest pobranie tego katalogu do GitHub.Dodaj informacje uwierzytelniające, aby
~/.m2/settings.xml
githubsite-maven-plugin
mógł przesyłać do GitHub:(Jak wspomniano, pamiętaj, aby upewnić się,
chmod 700 settings.xml
że nikt nie może odczytać Twojego hasła w pliku. Jeśli ktoś wie, jak poprosić wtyczkę site-maven o podanie hasła 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:Na koniec skonfiguruj
site-maven-plugin
przesyłanie z tymczasowego repozytorium przemieszczania do swojegomvn-repo
oddziału w Github:mvn-repo
Oddział nie musi istnieć, to zostanie utworzony dla Ciebie.Teraz uruchom
mvn clean deploy
ponownie. Powinieneś zobaczyć maven-deploy-plugin „upload” plików do lokalnego repozytorium przemieszczania w katalogu docelowym, a następnie wtyczkę site-maven zatwierdzającą te pliki i wypychającą je na serwer.Wejdź na github.com w przeglądarce, wybierz
mvn-repo
oddział i sprawdź, czy wszystkie Twoje pliki binarne już tam są.Gratulacje!
Teraz możesz rozmieścić swoje artefakty z raju w publicznym repozytorium biedaka, po prostu biegając
mvn clean deploy
.Jest jeszcze jeden krok, który chcesz zrobić, a mianowicie skonfigurować wszystkie poms, które zależą od pom, aby wiedzieć, gdzie jest twoje repozytorium. Dodaj następujący fragment kodu do pom pom projektu zależnego od projektu:
Teraz każdy projekt, który wymaga plików jar, automatycznie pobierze je z repozytorium github maven.
Edytuj: aby uniknąć problemu wymienionego w komentarzach („Błąd podczas tworzenia zatwierdzenia: nieprawidłowe żądanie. W przypadku„ właściwości / nazwa ”zero nie jest łańcuchem.”), Upewnij się, że podałeś nazwę w swoim profilu na github.
źródło
<merge>true</merge>
w konfiguracji wtyczki site maven. Jeśli to zrobisz, myślę, że będziesz musiał ręcznie utworzyć gałąź mvn-repo w github i usunąć wszystkie swoje pliki za pierwszym razem.<altDeploymentRepository>internal.repo::default::file://${user.dir}/target/mvn-repo</altDeploymentRepository>
z Maven wdrożeniu-plugin , a<outputDirectory>${user.dir}/target/mvn-repo</outputDirectory>
z site-maven-plugin . Spowoduje to rozmieszczenie wszystkich artefaktów w projekcie głównym („nadrzędnym”) i przekazanie ich do odpowiedniego katalogu nadrzędnego na github. W przeciwnym razie kompilacja każdego podmodułu zastąpi kompilację podmodułu zbudowanego przed ...<github.global.userName>YourUserName</github.global.userName> <github.global.password>${GITHUB_OAUTH_TOKEN</github.global.password>
Nie używaj GitHub jako repozytorium Maven.
Edycja: Ta opcja ma dużo głosów negatywnych, ale nie ma komentarzy na temat przyczyny. Jest to prawidłowa opcja niezależnie od technicznych możliwości hostowania w GitHub. Hosting na GitHub jest nieprawidłowy z wszystkich powodów wymienionych poniżej i bez komentarzy nie mogę poprawić odpowiedzi, aby wyjaśnić twoje problemy.
Najlepsza opcja - współpraca z oryginalnym projektem
Najlepszym rozwiązaniem jest przekonanie oryginalnego projektu, aby uwzględnił zmiany i trzymał się oryginału.
Alternatywa - utrzymanie własnego widelca
Ponieważ rozwidliłeś bibliotekę typu open source, a twój widelec jest również oprogramowaniem typu open source, możesz przesłać swój widelec do Maven Central (przeczytaj Przewodnik po przesyłaniu artefaktów do centralnego repozytorium ), nadając mu nowy,
groupId
a może nowyartifactId
.Rozważ tę opcję tylko, jeśli chcesz zachować ten rozwidlenie, dopóki zmiany nie zostaną włączone do oryginalnego projektu, a następnie powinieneś go porzucić.
Naprawdę mocno zastanów się, czy widelec jest właściwą opcją. Przeczytaj niezliczone wyniki Google dla „dlaczego nie rozwidlać”
Rozumowanie
Nadmuchiwanie repozytorium słojami zwiększa rozmiar pobierania bez żadnych korzyści
Słoik należy do
output
twojego projektu, można go w dowolnym momencie zregenerowaćinputs
, a Twoje repozytorium GitHub powinno zawierać tylkoinputs
.Nie wierzysz mi? Następnie sprawdź wyniki Google pod kątem „nie przechowuj plików binarnych w git” .
Pomoc GitHub Praca z dużymi plikami powie ci to samo. Wprawdzie słoiki nie są duże, ale są większe niż kod źródłowy, a gdy jar zostanie utworzony przez wydanie, nie ma powodu, aby być wersjonowanym - po to jest nowe wydanie.
Zdefiniowanie wielu repozytoriów w pliku pom.xml spowalnia kompilację według liczby repozytoriów razy liczby artefaktów
Stephen Connolly mówi :
Zgadza się! Maven musi sprawdzić każdy artefakt (i jego zależności) zdefiniowane w pliku pom.xml z każdym zdefiniowanym repozytorium , ponieważ nowsza wersja może być dostępna w każdym z tych repozytoriów.
Wypróbuj sam, 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 kompilacja sprawdzi tylko jedno miejsce.
Możesz przeczytać więcej o repozytoriach w dokumentacji Mavena na temat Wprowadzenie do repozytoriów
źródło
Możesz użyć JitPack (bezpłatny dla publicznych repozytoriów Git), aby ujawnić swoje repozytorium GitHub jako artefakt Maven. To jest bardzo łatwe. Twoi użytkownicy będą musieli dodać to do swojego pom.xml:
Zgodnie z odpowiedzią gdzie indziej chodzi o to, że JitPack zbuduje Twoje repozytorium GitHub i będzie obsługiwał słoiki. Wymagane jest posiadanie pliku kompilacji i wersji GitHub.
Zaletą jest to, że nie musisz zajmować się wdrażaniem i przesyłaniem. Ponieważ nie chciałeś utrzymywać własnego repozytorium artefaktów, to dobrze pasuje do twoich potrzeb.
źródło
Inną alternatywą jest użycie dowolnego hostingu z obsługą webdav. Oczywiście będziesz potrzebować trochę miejsca, ale jest to prosta konfiguracja i dobra alternatywa dla uruchamiania w pełni funkcjonalnego serwera Nexus.
dodaj to do sekcji kompilacji
Dodaj coś takiego do swojej sekcji managementManagement
Na koniec skonfiguruj dostęp do repozytorium w pliku settings.xml
dodaj to do sekcji serwerów
oraz definicję sekcji repozytoriów
Wreszcie, jeśli masz jakiś standardowy hosting php, możesz użyć czegoś takiego jak sabredav, aby dodać funkcje webdav.
Zalety: masz własne repozytorium maven Wady: nie masz żadnych możliwości zarządzania nexusem; potrzebujesz gdzieś konfiguracji webdav
źródło
Od 2019 r. Możesz teraz korzystać z nowej funkcji o nazwie rejestr pakietów Github .
Zasadniczo proces jest następujący:
settings.xml
wdrożyć za pomocą
źródło
Alternatywnie Bintray zapewnia bezpłatny 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 staraj się zintegrować swoje zmiany w górę lub zmień nazwę i opublikuj w Central. Ułatwia innym korzystanie z widelca.
źródło
Jeśli masz tylko plik
aar
lubjar
sam plik, albo po prostu nie chcesz używać wtyczek - stworzyłem prosty skrypt powłoki . Możesz osiągnąć to samo - publikując swoje artefakty w Github i wykorzystując je jako publiczne repozytorium Maven.źródło