Problemy popularnych podejść
Większość odpowiedzi, które znajdziesz w Internecie, sugeruje zainstalowanie zależności w lokalnym repozytorium lub określenie zakresu „systemowego” w pom
i dystrybucję zależności ze źródłem projektu. Ale oba te rozwiązania są w rzeczywistości wadliwe.
Dlaczego nie powinieneś stosować podejścia „Zainstaluj w lokalnym repozytorium”
Po zainstalowaniu zależności w lokalnym repozytorium pozostaje ona tam. Twój artefakt dystrybucji będzie działał dobrze, o ile będzie miał dostęp do tego repozytorium. Problem polega na tym, że w większości przypadków to repozytorium będzie znajdować się na twoim komputerze lokalnym, więc nie będzie sposobu na rozwiązanie tej zależności na żadnym innym komputerze. Wyraźne uzależnienie artefaktu od konkretnej maszyny nie jest sposobem na radzenie sobie z różnymi rzeczami. W przeciwnym razie ta zależność będzie musiała zostać zainstalowana lokalnie na każdej maszynie pracującej z tym projektem, co nie jest lepsze.
Dlaczego nie powinieneś stosować podejścia „Zakres systemu”
Słoje, na których polegasz przy zastosowaniu podejścia „Zakres systemu”, nie są instalowane w żadnym repozytorium ani dołączane do pakietów docelowych. Dlatego twój pakiet dystrybucyjny nie będzie w stanie rozwiązać tej zależności, gdy zostanie użyty. Wierzę, że był to powód, dla którego użycie zakresu systemowego nawet się przestało. W każdym razie nie chcesz polegać na przestarzałej funkcji.
Statyczne rozwiązanie repozytorium w projekcie
Po umieszczeniu tego w pom
:
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/repo</url>
</repository>
dla każdego artefaktu o identyfikatorze grupy x.y.z
Maven w poszukiwaniu artefaktów uwzględni następującą lokalizację w katalogu projektu:
repo/
| - x/
| | - y/
| | | - z/
| | | | - ${artifactId}/
| | | | | - ${version}/
| | | | | | - ${artifactId}-${version}.jar
Aby rozwinąć więcej na ten temat, możesz przeczytać ten post na blogu .
Użyj Maven, aby zainstalować repozytorium projektu
Zamiast ręcznie tworzyć tę strukturę, zalecamy użycie wtyczki Maven do zainstalowania słoików jako artefaktów. Aby zainstalować artefakt w repozytorium w projekcie w repo
folderze wykonaj:
mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]
Jeśli wybierzesz to podejście, będziesz mógł uprościć deklarację repozytorium w pom
:
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
Skrypt pomocnika
Ponieważ wykonywanie komend instalacyjnych dla każdej biblioteki jest trochę denerwujące i zdecydowanie podatne na błędy, stworzyłem skrypt narzędziowy, który automatycznie instaluje wszystkie słoiki z lib
folderu do repozytorium projektu, jednocześnie automatycznie tłumacząc wszystkie metadane (groupId, artefactId itp.) Z nazwy plików. Skrypt wypisuje również xml zależności, które możesz skopiować i wkleić w swoim pliku pom
.
Uwzględnij zależności w pakiecie docelowym
Po utworzeniu repozytorium wewnątrz projektu rozwiązałeś problem dystrybucji zależności projektu z jego źródłem, ale od tego czasu artefakt docelowy projektu będzie zależał od niepublikowanych słoików, więc kiedy będziesz instalował to do repozytorium będzie miało nierozwiązywalne zależności.
Aby rozwiązać ten problem, sugeruję włączenie tych zależności do pakietu docelowego. Można to zrobić za pomocą wtyczki asemblera lub lepiej za pomocą wtyczki OneJar . Oficjalna dokumentacja OneJar jest łatwa do zrozumienia.