Instrukcje instalacji na mojej kompilacji zawierały wszystko oprócz części generatePom. To wydaje się być kluczowe.
Jason D
4
<ścieżka do pliku> co to znaczy? Jak C: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... lub możemy zrobić $ {project.basedir} /src/main/resources/myJar.jar
Igor Beaufils
17
Odpowiedź nie wspomina o pliku README ani o tym, że słoiki zostały zabrane ze sobą. Jeśli jednak projekt zawiera słoiki, równie dobrze możesz umieścić repo w projekcie, jak wspomniano tutaj stackoverflow.com/a/36602256/1000011, wtedy nie potrzebujesz README, ponieważ projekt będzie działał tak, jakby słoiki były w centralnym miejscu bez żadnych dodatkowych ręcznych kroków.
opticyclic
8
@opticyclic Twój komentarz wymaga więcej głosów pozytywnych lub ta odpowiedź musi zostać zredagowana. Jest to przepis na katastrofę dla nowicjuszy, którzy nie zdają sobie sprawy, że zainstalowanie w lokalnym repozytorium Maven nie obejmie wszystkich.
W nowych wersjach ta funkcja jest oznaczona jako przestarzała, ale nadal działa i jeszcze nie została usunięta (po prostu widzisz ostrzeżenie w dzienniku podczas uruchamiania maven). W grupie maven pojawia się problem dotyczący tej https://issues.apache.org/jira/browse/MNG-6523 (możesz wziąć udział i opisać, dlaczego ta funkcja jest pomocna w niektórych przypadkach). Mam nadzieję, że ta funkcja pozostanie!
Jeśli mnie pytasz, dopóki funkcja nie zostanie usunięta, używam tego do uzależnienia tylko od jednego niegrzecznego pliku jar w moim projekcie, który nie mieści się w repozytorium. Jeśli ta funkcja zostanie usunięta, istnieje wiele dobrych odpowiedzi, które mogę wybrać później.
Są chwile, kiedy chcesz na przykład przetestować stary słoik i myślę, że ta odpowiedź jest do tego odpowiednia. Tego potrzebowałem. Upvoted
John Lockwood
36
Choć jest to przyjemne i łatwe w użyciu, rozwiązanie ma problem polegający na tym, że plik.jar nie zostanie dołączony do pliku WAR Twojej aplikacji.
Matthias
40
Powyższe rozwiązanie już nie działa, zwraca: „” dependencies.dependency.systemPath ”dla xx.jar nie powinien wskazywać plików w katalogu projektu” To już zostało zrobione w stackoverflow.com/questions/10935135/…
sarah .ferguson
8
W tej odpowiedzi, nie są artifactIdi groupIdniewłaściwy sposób wokół?
Po pierwsze, chciałbym wyrazić uznanie dla tej odpowiedzi anonimowemu użytkownikowi przepełnienia stosu - jestem pewien, że widziałem już kiedyś podobną odpowiedź - ale teraz nie mogę jej znaleźć.
Najlepszą opcją posiadania lokalnych plików JAR jako zależności jest utworzenie lokalnego repozytorium Maven. Takie repozytorium jest niczym więcej niż właściwą strukturą katalogów z plikami pom.
Na przykład: mam projekt główny na ${master_project}lokalizacji i podprojekt 1 jest włączony ${master_project}/${subproject1}.
Następnie utworzyć repozytorium Maven w:
${master_project}/local-maven-repo.
W pliku pom w podprojekcie1 znajdującym się w ${master_project}/${subproject1}/pom.xml, należy określić repozytorium, które przyjmuje ścieżkę pliku jako parametr adresu URL:
Zależność można określić jak dla każdego innego repozytorium. To czyni twoje repozytorium pom niezależnym. Na przykład, gdy żądany plik JAR będzie dostępny w centrali Maven, wystarczy go usunąć z lokalnego repozytorium, a zostanie on pobrany z domyślnego repozytorium.
Ostatnią rzeczą, którą należy zrobić, jest dodanie pliku JAR do lokalnego repozytorium za pomocą przełącznika -DlocalRepositoryPath w następujący sposób:
Po zainstalowaniu pliku JAR repozytorium Maven może zostać przypisane do repozytorium kodu, a cała konfiguracja jest niezależna od systemu. ( Przykład roboczy w GitHub ).
Zgadzam się, że zaangażowanie plików JAR w repozytorium kodu źródłowego nie jest dobrą praktyką, ale w rzeczywistości szybkie i brudne rozwiązania są czasem lepsze niż pełne repozytorium Nexus do hostowania jednego pliku JAR, którego nie można opublikować.
To jedyna poprawna odpowiedź tutaj, ponieważ poprawnie utworzy Twoje repozytorium podczas korzystania z wdrożenia.
opticyclic
Czy to podejście zadziałałoby, gdyby kod został wdrożony przy użyciu serwera kompilacji CI? Wygląda na to, że automatyczne kompilacje nie miałyby dostępu do zależności.
Wallace Howery
2
@ user2748659 tak, jeśli na twoich serwerach kompilacji CI folder local-maven-repojest zawarty (jako dziecko w tym przykładzie) w folderze źródłowym
Anthony O.
3
Ta odpowiedź sprawdziła się u mnie. W przypadku projektu współużytkowanego posiadanie repozytorium w katalogu projektu i dodanie go do kontroli wersji gwarantuje, że każdy, kto wypróbuje projekt, nie będzie miał brakujących zależności. Jeśli masz wiele zależności, udostępnione, zdalne repozytorium jest prawdopodobnie lepszym rozwiązaniem, w przeciwnym razie przechowywanie repozytorium w katalogu projektu jest całkowicie w porządku.
Aquarelle
2
Pamiętaj, że aby to zrobić, może być konieczne dodanie opcji -Dpackaging = jar. W przeciwnym razie pojawi się komunikat „Informacje o artefakcie są niekompletne lub nieprawidłowe: brakuje opakowania”.
J Woodchuck,
43
Chciałbym takie rozwiązanie - użyj maven-install-pluginw pliku pom:
W takim przypadku możesz wykonać, mvn initializea jar zostanie zainstalowany w lokalnym repozytorium maven. Teraz ten słoik jest dostępny podczas każdego kroku maven na tym komputerze (nie zapomnij uwzględnić tej zależności, jak każdej innej zależności maven w pom z <dependency></dependency>tagiem). Możliwe jest również powiązanie instalacji jar nie initializekrok po kroku, ale każdy inny krok, który ci się podoba.
Działa to dla mnie dobrze, ale tylko wtedy, gdy działam mvn initializewcześniej mvn package: nie mogę, mvn initialize packageinaczej próbuję pobrać plik JAR z centralnego repozytorium. Dlaczego to? Pomyślałem, że w tym celu zostaną zrealizowane te cele / fazy.
DavidS,
1
W rzeczywistości powinny być uruchamiane w kolejności. Spójrz na listę domyślnego cyklu życia: maven.apache.org/guides/introduction/... Możesz użyć innego kroku, aby powiązać.
sphinks
2
Próbowałem każdej metody, ale ostatecznie musiałem skorzystać z tego rozwiązania. Głównym powodem jest to, że chciałem móc lokalnie budować pakiety w trybie offline. Jeśli zadeklarowałem to jako zależność od lokalnie zdefiniowanego repozytorium, to zawsze było to uważane za kolejne repozytorium online, a kompilacja maven narzekała na brak kary. To rozwiązanie działa dobrze w każdym przypadku.
Mauli,
2
Myślę, że lepiej jest użyć fazy czystej, ponieważ inicjalizacja będzie wykonywana za każdym razem, gdy użyjemy pakietu mvn, gdy jest to niepotrzebne. Wreszcie, jeśli potrzebujemy tylko wygenerować jar / war, możemy użyć bezpośrednio pakietu mvn clean .
Deoxyseia,
„ Możliwe jest również powiązanie instalacji jar, aby nie inicjować kroku, ale każdy inny krok, który ci się podoba. ” Niekoniecznie jest prawdą. Jeśli zależności nie ma jeszcze w repozytorium i używana jest faza, która następuje po fazie, która rozwiązuje zależności (np. compile), Kompilacja zakończy się niepowodzeniem.
GeroldBroser przywraca Monikę
29
<dependency><groupId>group id name</groupId><artifactId>artifact name</artifactId><version>version number</version><scope>system</scope><systemPath>jar location</systemPath></dependency>
Jednak będzie to działało tylko na twoim komputerze (oczywiście), do dzielenia się zwykle sensowne jest użycie odpowiedniego archiwum m2 (nexus / artifactory) lub jeśli nie masz żadnego z nich lub nie chcesz konfigurować lokalnego maven ustrukturyzowane archiwum i skonfiguruj „repozytorium” w pom: local:
Otrzymuję błąd Nie udało się zainstalować artefaktu (odmowa dostępu). Jak mogę to rozwiązać? @Aurasphere
Ramzah Rehman
1
@RamzahRehman spróbuj otworzyć wiersz polecenia z uprawnieniami admina, klikając go prawym przyciskiem myszy, a następnie wybierając opcję „Uruchom jako administrator”
Aurasphere
9
Jednym ze sposobów jest przesłanie go do własnego menedżera repozytorium Maven (takiego jak Nexus). W każdym razie dobrą praktyką jest posiadanie własnego menedżera repozytorium.
Innym fajnym sposobem, jaki ostatnio widziałem, jest włączenie wtyczki instalacyjnej Maven do swojego cyklu życia kompilacji: deklarujesz w POM, aby zainstalować pliki w lokalnym repozytorium. Jest to mały, ale niewielki narzut i nie wymaga ręcznego kroku.
Skończyć z przejściem na stopień. Nie działa Jeśli lokalny słoik jest zdefiniowany jako zależności, maven nie uruchomi wtyczek przed usunięciem zależności, ręczna instalacja jest nieunikniona. znalazł dyskusję na temat tej sytuacji: stackoverflow.com/questions/5951999/…
xinthink
7
Oczywiście możesz dodać słoiki do tego folderu. Ale może nie to, co chcesz osiągnąć ...
Innym interesującym przypadkiem jest, gdy chcesz mieć w swoim projekcie prywatne słoiki z maven. Możesz chcieć zachować możliwości Maven w celu rozwiązania zależności przechodnich. Rozwiązanie jest dość łatwe.
Myślę, że lepszym rozwiązaniem tego problemu jest użycie wtyczki maven-install-plug do automatycznej instalacji plików podczas instalacji. Tak to skonfigurowałem dla mojego projektu.
Najpierw dodaj ścieżkę (gdzie przechowujesz lokalne pliki .jars) jako właściwość.
Po skonfigurowaniu projektu w ten sposób projekt będzie kontynuowany, nawet jeśli przeniesiesz go na inny komputer (biorąc pod uwagę, że zawiera on wszystkie pliki jar w ścieżce określonej przez właściwość local.sdk ).
Dla groupId użytku unikalną nazwę, żeby upewnić się, że nie ma żadnych konfliktów.
Teraz, gdy ty mvn installlub mvn testlokalne słoiki zostaną dodane automatycznie.
Chcę udostępnić kod, w którym możesz przesłać folder pełen słoików. Jest to przydatne, gdy dostawca nie ma publicznego repozytorium i trzeba ręcznie dodać wiele bibliotek. Postanowiłem zbudować .bat zamiast wywoływać bezpośrednio do maven, ponieważ mogą to być błędy braku pamięci. Został przygotowany dla środowiska Windows, ale łatwo go dostosować do systemu operacyjnego Linux:
import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import java.util.jar.Attributes;import java.util.jar.JarFile;import java.util.jar.Manifest;publicclassCreateMavenRepoApp{privatestaticfinalString OCB_PLUGIN_FOLDER ="C://your_folder_with_jars";publicstaticvoid main(String[] args)throwsIOException{File directory =newFile();//get all the files from a directoryPrintWriter writer =newPrintWriter("update_repo_maven.bat","UTF-8");
writer.println("rem "+newDate());File[] fList = directory.listFiles();for(File file : fList){if(file.isFile()){String absolutePath = file.getAbsolutePath();Manifest m =newJarFile(absolutePath).getManifest();Attributes attributes = m.getMainAttributes();String symbolicName = attributes.getValue("Bundle-SymbolicName");if(symbolicName!=null&&symbolicName.contains("com.yourCompany.yourProject")){String[] parts =symbolicName.split("\\.");String artifactId = parts[parts.length-1];String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);String version = attributes.getValue("Bundle-Version");String mavenLine="call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
writer.println(mavenLine);}}}
writer.close();}}
Po uruchomieniu tego głównego z dowolnego IDE, uruchom update_repo_maven.bat.
Twój kod String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))wydaje się wskazywać, że obsługiwane będą tylko niestandardowe słoiki. Nie tego potrzebujemy: zamiast tego kilka słoików stron trzecich. Czy macie jakieś sugestie, jak zainstalować żadnemu Jar w ten sposób?
javadba
Mam ustalony kod: i umieścić odpowiedź na dole.
javadba
3
Oto krótka składnia dla nowszych wersji:
mvn install:install-file -Dfile=<path-to-file>
Działa, gdy JAR został zbudowany przez Apache Maven - najczęstszy przypadek. Następnie będzie zawierać plik pom.xml w podfolderze katalogu META-INF, który zostanie domyślnie odczytany.
Zależności Maven . Jest to ustawienie domyślne, ale w niektórych przypadkach znalazłem jawne ustawienie tego zasięgu również w Maven, aby znaleźć biblioteki lokalne w lokalnym repozytorium.
Z jakiegoś powodu w aplikacji internetowej, którą konserwuję, ani rozwiązania Alirezy Fattahi, ani rozwiązania JJ Romana działało poprawnie. W obu przypadkach kompilacja idzie dobrze (widzi słoik), ale opakowanie nie zawiera słoika w czasie wojny.
Jedynym sposobem, w jaki udało mi się sprawić, by działało, było włożenie słoika, /src/main/webapp/WEB-INF/lib/a następnie połączenie go z roztworem Fattahisa lub Romana.
Pamiętaj, że niekoniecznie dobrym pomysłem jest użycie lokalnego repozytorium. Jeśli ten projekt jest udostępniany innym, wtedy wszyscy będą mieli problemy i pytania, gdy nie będzie działać, a słoik nie będzie dostępny nawet w twoim systemie kontroli źródła!
Chociaż repozytorium wspólne jest najlepszą odpowiedzią, jeśli z jakiegoś powodu nie możesz tego zrobić, osadzenie słoika jest lepsze niż repozytorium lokalne. Lokalna zawartość repozytorium może powodować wiele problemów, zwłaszcza w miarę upływu czasu.
jeśli dodasz słoiki w systemie kontroli źródła, biblioteki będą zawsze dostępne razem ze źródłem. Bez źródła, bez bibliotek. Z maven zamiast źródła może być w porządku, ale repozytorium niedostępne.
sarah.ferguson,
@Frank ... jakiś pomysł na temat tworzenia pliku wykonywalnego jar bez uwzględnienia zewnętrznych zależności (plików biblioteki)?
Satish Karuturi
Dla kogoś nowego w maven i szukającego odpowiedzi na pierwotne pytanie, co oznacza „osadzanie słoika”?
cdock
1
W lokalnym repozytorium możesz zainstalować słoik, wydając polecenia
Możesz napisać kod poniżej w wierszu poleceń lub jeśli używasz wbudowanego narzędzia eclipse maven, kliknij prawym przyciskiem myszy projekt -> Uruchom jako -> uruchom konfiguracje ... -> w lewym panelu kliknij prawym przyciskiem myszy Maven Build -> nowa konfiguracja -> wpisz kod w Celach i katalogu podstawowym: $ {project_loc: NameOfYourProject} -> Uruchom
Zmodyfikuj fileścieżkę na podstawie rzeczywistej ścieżki pliku (zalecane jest umieszczenie tych zewnętrznych słoików niepochodzących z maven w jakimś folderze, powiedzmy lib, i umieszczenie tego libfolderu w projekcie, aby użyć ścieżki względnej specyficznej dla projektu i uniknąć dodawania systemu konkretna ścieżka bezwzględna.
Jeśli masz wiele słoików zewnętrznych, po prostu powtórz <execution>dla innych słoików w tym samym maven-install-plugin.
Krok 2: Po skonfigurowaniu pliku maven-install-pluginpokazanego powyżej w pom.xmlpliku, musisz pom.xmljak zwykle użyć tych słoików :
Pamiętaj, że maven-install-plugintylko zewnętrzne słoiki są kopiowane do lokalnych.m2 repozytorium maven. Otóż to. Nie uwzględnia automatycznie tych słoików jako zależności maven od twojego projektu.
Miałem ten sam błąd dla zestawu zależności w moim pom.xml okazuje się, że wersje zależności nie zostały określone w pom.xml i zostały wymienione w repozytorium nadrzędnym. Z jakiegoś powodu szczegóły wersji nie były synchronizowane z tym repozytorium. Dlatego ręcznie wprowadziłem wersje za pomocą znacznika i działało to jak urok. Trochę czasu zajęło sprawdzenie wersji w obiekcie nadrzędnym i określenie tutaj. Ale można to zrobić tylko dla słoików, które pokazują błąd artefaktu i działa. Mam nadzieję, że to komuś pomoże.
Jeśli używasz Eclipse, umieść słoik w lib /, kliknij prawym przyciskiem myszy nazwę słoika i kliknij „dodaj do ścieżki kompilacji”. Eclipse utworzy „biblioteki odniesienia” i umieści słoik za Ciebie
Rozwiązało to dla mnie import słoika od razu w programie
To doda wpis do Eclipse .classpath, ale twoja kompozycja maven mvn packagezostanie uzupełniona, gdy zaczniesz używać tej zależności, ponieważ maven nie ma jej definicji i powinno być tylkopom.xml
Paul Verest
tak, masz rację, paczka nie będzie zawierać lokalnego słoika. Odpowiedziałem jednak na pytanie, jak dodać go do projektu (w sposób zaćmieniowy).
install-file
skryptów.Odpowiedzi:
Zainstaluj plik JAR w lokalnym repozytorium Maven w następujący sposób:
Gdzie każdy odnosi się do:
<path-to-file>
: ścieżka do pliku do załadowania np. →c:\kaptcha-2.3.jar
<group-id>
: grupa, w której plik powinien zostać zarejestrowany, np. →com.google.code
<artifact-id>
: nazwa artefaktu dla pliku, np. →kaptcha
<version>
: wersja pliku np. →2.3
<packaging>
: opakowanie pliku np. →jar
Odniesienie
install:install-file
celźródło
Możesz dodać lokalne zależności bezpośrednio (jak wspomniano w projekcie build maven z dołączonymi bibliotekami firmowymi ) w następujący sposób:
Aktualizacja
W nowych wersjach ta funkcja jest oznaczona jako przestarzała, ale nadal działa i jeszcze nie została usunięta (po prostu widzisz ostrzeżenie w dzienniku podczas uruchamiania maven). W grupie maven pojawia się problem dotyczący tej https://issues.apache.org/jira/browse/MNG-6523 (możesz wziąć udział i opisać, dlaczego ta funkcja jest pomocna w niektórych przypadkach). Mam nadzieję, że ta funkcja pozostanie!
Jeśli mnie pytasz, dopóki funkcja nie zostanie usunięta, używam tego do uzależnienia tylko od jednego niegrzecznego pliku jar w moim projekcie, który nie mieści się w repozytorium. Jeśli ta funkcja zostanie usunięta, istnieje wiele dobrych odpowiedzi, które mogę wybrać później.
źródło
artifactId
igroupId
niewłaściwy sposób wokół?Po pierwsze, chciałbym wyrazić uznanie dla tej odpowiedzi anonimowemu użytkownikowi przepełnienia stosu - jestem pewien, że widziałem już kiedyś podobną odpowiedź - ale teraz nie mogę jej znaleźć.
Najlepszą opcją posiadania lokalnych plików JAR jako zależności jest utworzenie lokalnego repozytorium Maven. Takie repozytorium jest niczym więcej niż właściwą strukturą katalogów z plikami pom.
Na przykład: mam projekt główny na
${master_project}
lokalizacji i podprojekt 1 jest włączony${master_project}/${subproject1}
.Następnie utworzyć repozytorium Maven w:
${master_project}/local-maven-repo
.W pliku pom w podprojekcie1 znajdującym się w
${master_project}/${subproject1}/pom.xml
, należy określić repozytorium, które przyjmuje ścieżkę pliku jako parametr adresu URL:Zależność można określić jak dla każdego innego repozytorium. To czyni twoje repozytorium pom niezależnym. Na przykład, gdy żądany plik JAR będzie dostępny w centrali Maven, wystarczy go usunąć z lokalnego repozytorium, a zostanie on pobrany z domyślnego repozytorium.
Ostatnią rzeczą, którą należy zrobić, jest dodanie pliku JAR do lokalnego repozytorium za pomocą przełącznika -DlocalRepositoryPath w następujący sposób:
Po zainstalowaniu pliku JAR repozytorium Maven może zostać przypisane do repozytorium kodu, a cała konfiguracja jest niezależna od systemu. ( Przykład roboczy w GitHub ).
Zgadzam się, że zaangażowanie plików JAR w repozytorium kodu źródłowego nie jest dobrą praktyką, ale w rzeczywistości szybkie i brudne rozwiązania są czasem lepsze niż pełne repozytorium Nexus do hostowania jednego pliku JAR, którego nie można opublikować.
źródło
${project.parent.basedir}
wydaje się, że w dzisiejszych czasach nic nie rozwiązuje, użyłem${project.basedir}/..
i działałem doskonale.<mirrorOf>*</mirrorOf>
.Utwórz nowy folder, powiedzmy
local-maven-repo
w katalogu głównym projektu Maven.Po prostu dodaj lokalne repozytorium
<project>
do swojegopom.xml
:Następnie dla każdego zewnętrznego słoika, który chcesz zainstalować, przejdź do katalogu głównego projektu i wykonaj:
źródło
local-maven-repo
jest zawarty (jako dziecko w tym przykładzie) w folderze źródłowymChciałbym takie rozwiązanie - użyj
maven-install-plugin
w pliku pom:W takim przypadku możesz wykonać,
mvn initialize
a jar zostanie zainstalowany w lokalnym repozytorium maven. Teraz ten słoik jest dostępny podczas każdego kroku maven na tym komputerze (nie zapomnij uwzględnić tej zależności, jak każdej innej zależności maven w pom z<dependency></dependency>
tagiem). Możliwe jest również powiązanie instalacji jar nieinitialize
krok po kroku, ale każdy inny krok, który ci się podoba.źródło
mvn initialize
wcześniejmvn package
: nie mogę,mvn initialize package
inaczej próbuję pobrać plik JAR z centralnego repozytorium. Dlaczego to? Pomyślałem, że w tym celu zostaną zrealizowane te cele / fazy.compile
), Kompilacja zakończy się niepowodzeniem.źródło
<scope>system
jest już przestarzałe.install:install-file
artefakt do lokalnego repozytorium i użyj go jako „normalnej” zależności (z domyślnym zakresemcompile
) lub użyj rozwiązania repozytorium w projekcie .Tak, możesz mieć, ale to nie jest dobry pomysł.
Zamiast tego zainstaluj wszystkie te słoiki w repozytoriach maven
Zobacz także
źródło
Naprawdę szybki i brudny sposób to wskazanie lokalnego pliku:
Jednak będzie to działało tylko na twoim komputerze (oczywiście), do dzielenia się zwykle sensowne jest użycie odpowiedniego archiwum m2 (nexus / artifactory) lub jeśli nie masz żadnego z nich lub nie chcesz konfigurować lokalnego maven ustrukturyzowane archiwum i skonfiguruj „repozytorium” w pom: local:
zdalny:
w tym celu możliwa jest również ścieżka względna przy użyciu zmiennej basedir:
źródło
<url>file:${basedir}</url>
zamiast tego podstawowego adresu URL.Dodaj własny lokalny plik JAR w pliku POM i użyj go w kompilacji maven.
Na przykład:
Następnie dodaj go do POM w ten sposób:
źródło
Jednym ze sposobów jest przesłanie go do własnego menedżera repozytorium Maven (takiego jak Nexus). W każdym razie dobrą praktyką jest posiadanie własnego menedżera repozytorium.
Innym fajnym sposobem, jaki ostatnio widziałem, jest włączenie wtyczki instalacyjnej Maven do swojego cyklu życia kompilacji: deklarujesz w POM, aby zainstalować pliki w lokalnym repozytorium. Jest to mały, ale niewielki narzut i nie wymaga ręcznego kroku.
http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html
źródło
Oczywiście możesz dodać słoiki do tego folderu. Ale może nie to, co chcesz osiągnąć ...
Jeśli potrzebujesz tych słoików do kompilacji, sprawdź to powiązane pytanie: Czy mogę dodać słoiki do ścieżki klas maven 2 bez ich instalowania?
Ponadto, zanim ktokolwiek to zasugeruje, NIE używaj zakresu systemowego.
źródło
Innym interesującym przypadkiem jest, gdy chcesz mieć w swoim projekcie prywatne słoiki z maven. Możesz chcieć zachować możliwości Maven w celu rozwiązania zależności przechodnich. Rozwiązanie jest dość łatwe.
Dodaj następujące wiersze do pliku pom.xml
Otwórz folder .m2 / repository i skopiuj strukturę katalogów projektu, który chcesz zaimportować do folderu libs .
Załóżmy na przykład, że chcesz zaimportować zależność
Po prostu przejdź do .m2 / repository, a zobaczysz następujący folder
com / mojafirma / myproject / 1.2.3
Skopiuj wszystko z folderu libs (ponownie, łącznie z folderami w .m2 / repository ) i gotowe.
źródło
wiersz poleceń :
źródło
Ważną częścią zależności jest: $ {pom.basedir} (zamiast tylko $ {basedir})
źródło
Myślę, że lepszym rozwiązaniem tego problemu jest użycie wtyczki maven-install-plug do automatycznej instalacji plików podczas instalacji. Tak to skonfigurowałem dla mojego projektu.
Najpierw dodaj ścieżkę (gdzie przechowujesz lokalne pliki .jars) jako właściwość.
Następnie w obszarze
plugins
dodaj wtyczkę, aby zainstalować słoiki podczas kompilacji.Wreszcie, w zależnościach, możesz dodać słoiki
Po skonfigurowaniu projektu w ten sposób projekt będzie kontynuowany, nawet jeśli przeniesiesz go na inny komputer (biorąc pod uwagę, że zawiera on wszystkie pliki jar w ścieżce określonej przez właściwość
local.sdk
).Dla
groupId
użytku unikalną nazwę, żeby upewnić się, że nie ma żadnych konfliktów.Teraz, gdy ty
mvn install
lubmvn test
lokalne słoiki zostaną dodane automatycznie.źródło
Preferowanym sposobem byłoby utworzenie własnego zdalnego repozytorium.
Zobacz tutaj, aby dowiedzieć się, jak to zrobić. Zajrzyj do sekcji „ Przesyłanie do zdalnego repozytorium ”.
źródło
Chcę udostępnić kod, w którym możesz przesłać folder pełen słoików. Jest to przydatne, gdy dostawca nie ma publicznego repozytorium i trzeba ręcznie dodać wiele bibliotek. Postanowiłem zbudować .bat zamiast wywoływać bezpośrednio do maven, ponieważ mogą to być błędy braku pamięci. Został przygotowany dla środowiska Windows, ale łatwo go dostosować do systemu operacyjnego Linux:
Po uruchomieniu tego głównego z dowolnego IDE, uruchom update_repo_maven.bat.
źródło
String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))
wydaje się wskazywać, że obsługiwane będą tylko niestandardowe słoiki. Nie tego potrzebujemy: zamiast tego kilka słoików stron trzecich. Czy macie jakieś sugestie, jak zainstalować żadnemu Jar w ten sposób?Oto krótka składnia dla nowszych wersji:
Działa, gdy JAR został zbudowany przez Apache Maven - najczęstszy przypadek. Następnie będzie zawierać plik pom.xml w podfolderze katalogu META-INF, który zostanie domyślnie odczytany.
Źródło: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
źródło
Zobacz także ...
Zależności Maven . Jest to ustawienie domyślne, ale w niektórych przypadkach znalazłem jawne ustawienie tego zasięgu również w Maven, aby znaleźć biblioteki lokalne w lokalnym repozytorium.
źródło
Z jakiegoś powodu w aplikacji internetowej, którą konserwuję, ani rozwiązania Alirezy Fattahi, ani rozwiązania JJ Romana działało poprawnie. W obu przypadkach kompilacja idzie dobrze (widzi słoik), ale opakowanie nie zawiera słoika w czasie wojny.
Jedynym sposobem, w jaki udało mi się sprawić, by działało, było włożenie słoika,
/src/main/webapp/WEB-INF/lib/
a następnie połączenie go z roztworem Fattahisa lub Romana.źródło
Pamiętaj, że niekoniecznie dobrym pomysłem jest użycie lokalnego repozytorium. Jeśli ten projekt jest udostępniany innym, wtedy wszyscy będą mieli problemy i pytania, gdy nie będzie działać, a słoik nie będzie dostępny nawet w twoim systemie kontroli źródła!
Chociaż repozytorium wspólne jest najlepszą odpowiedzią, jeśli z jakiegoś powodu nie możesz tego zrobić, osadzenie słoika jest lepsze niż repozytorium lokalne. Lokalna zawartość repozytorium może powodować wiele problemów, zwłaszcza w miarę upływu czasu.
źródło
W lokalnym repozytorium możesz zainstalować słoik, wydając polecenia
Kliknij ten przydatny link, aby zrobić to samo ze strony internetowej mkyoung. Możesz także sprawdzić przewodnik maven dla tego samego
źródło
Aby zainstalować słoik innej firmy, wywołaj polecenie jak poniżej
źródło
Możesz napisać kod poniżej w wierszu poleceń lub jeśli używasz wbudowanego narzędzia eclipse maven, kliknij prawym przyciskiem myszy projekt -> Uruchom jako -> uruchom konfiguracje ... -> w lewym panelu kliknij prawym przyciskiem myszy Maven Build -> nowa konfiguracja -> wpisz kod w Celach i katalogu podstawowym: $ {project_loc: NameOfYourProject} -> Uruchom
Gdzie każdy odnosi się do:
<ścieżka do pliku>: ścieżka do pliku do załadowania, np. -> c: \ kaptcha-2.3.jar
<identyfikator grupy>: grupa, w której plik powinien zostać zarejestrowany np. -> com.google.code
<artefakt-id>: nazwa artefaktu dla pliku np. -> kaptcha
<wersja>: wersja pliku np. -> 2.3
<opakowanie>: opakowanie pliku np. -> jar
źródło
Krok 1: Skonfiguruj
maven-install-plugin
celinstall-file
w swoimpom.xml
Zmodyfikuj
file
ścieżkę na podstawie rzeczywistej ścieżki pliku (zalecane jest umieszczenie tych zewnętrznych słoików niepochodzących z maven w jakimś folderze, powiedzmylib
, i umieszczenie tegolib
folderu w projekcie, aby użyć ścieżki względnej specyficznej dla projektu i uniknąć dodawania systemu konkretna ścieżka bezwzględna.Jeśli masz wiele słoików zewnętrznych, po prostu powtórz
<execution>
dla innych słoików w tym samymmaven-install-plugin
.Krok 2: Po skonfigurowaniu pliku
maven-install-plugin
pokazanego powyżej wpom.xml
pliku, musiszpom.xml
jak zwykle użyć tych słoików :Pamiętaj, że
maven-install-plugin
tylko zewnętrzne słoiki są kopiowane do lokalnych.m2
repozytorium maven. Otóż to. Nie uwzględnia automatycznie tych słoików jako zależności maven od twojego projektu.To drobiazg, ale czasem łatwo go przeoczyć.
źródło
Miałem ten sam błąd dla zestawu zależności w moim pom.xml okazuje się, że wersje zależności nie zostały określone w pom.xml i zostały wymienione w repozytorium nadrzędnym. Z jakiegoś powodu szczegóły wersji nie były synchronizowane z tym repozytorium. Dlatego ręcznie wprowadziłem wersje za pomocą znacznika i działało to jak urok. Trochę czasu zajęło sprawdzenie wersji w obiekcie nadrzędnym i określenie tutaj. Ale można to zrobić tylko dla słoików, które pokazują błąd artefaktu i działa. Mam nadzieję, że to komuś pomoże.
źródło
W Apache Maven 3.5.4 musiałem dodać podwójny cytat. Bez podwójnego cytowania nie działało to dla mnie.
przykład: mvn install: plik-instalacyjny „-Dfile = lokalizacja do pliku jar” „-DgroupId = identyfikator grupy” „-DartifactId = identyfikator artefaktu” „-Dversion = wersja” „-Dpackaging = typ pakietu”
źródło
źródło
ODPOWIEDŹ JEST TYLKO DLA UŻYTKOWNIKÓW ECLIPSE:
Jeśli używasz Eclipse, umieść słoik w lib /, kliknij prawym przyciskiem myszy nazwę słoika i kliknij „dodaj do ścieżki kompilacji”. Eclipse utworzy „biblioteki odniesienia” i umieści słoik za Ciebie
Rozwiązało to dla mnie import słoika od razu w programie
źródło
.classpath
, ale twoja kompozycja mavenmvn package
zostanie uzupełniona, gdy zaczniesz używać tej zależności, ponieważ maven nie ma jej definicji i powinno być tylkopom.xml