To moje pierwsze dni nauki Mavena i wciąż zmagam się z podstawami. Mam zewnętrzny plik .jar (niedostępny w publicznych repozytoriach), do którego muszę się odwoływać w moim projekcie i próbuję dowiedzieć się, jaka jest moja najlepsza opcja.
Jest to projekt na małą skalę bez centralnego repozytorium dla bibliotek, więc musi to być repozytorium lokalne (w jakiś sposób dodane do kontroli źródła, nie wiem, czy ma to działać w ten sposób?) Lub plik .jar musi być przechowywany na dysk poza jakimkolwiek formalnym repozytorium.
1) Jaka jest najlepsza opcja dodawania pliku .jar do odwołań mojego projektu za pomocą maven, biorąc pod uwagę, że chcę, aby zarówno projekt, jak i biblioteka znajdowały się w kontroli źródła?
2) Nadal nie wydaje mi się, aby Eclipse widział zależność. Dodałem go ręcznie do sekcji pom i jest dobrze widoczny na liście zależności w m2eclipse. Kompilacja mvn i pakiet mvn powiodły się, ale uruchomienie programu skutkuje:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
LibraryStuff cannot be resolved to a type
To jest po edycji POM jako:
<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${lib.location}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>
Czy powinienem wykonać instalację mvn: plik instalacyjny, nawet myślałem, że mam już plik pom.xml edytowany jak powyżej?
Dzięki!
mvn install::install-file
: mkyong.com/maven/…mvn install::install-file
w lokalnym repozytorium oznaczałoby, że każdy, kto klonuje twój kod źródłowy, musiałby również wykonać ten ręczny krok. W przeciwnym razie kompilacja jest zepsuta po wyjęciu z pudełkaMożesz utworzyć repozytorium w projekcie, więc nie musisz tego robić za
run mvn install:install-file
każdym razem, gdy pracujesz na nowym komputerze/groupId/artifactId/version/artifactId-verion.jar
szczegółowo przeczytaj ten post na blogu
https://web.archive.org/web/20121026021311/charlie.cu.cc/2012/06/how-add-external-libraries-maven
źródło
mvn install:install-file
a następnie skopiowanie całej struktury katalogów z lokalnego repozytorium do repozytorium w projekcie.Można to łatwo osiągnąć, używając elementu <scope> zagnieżdżonego wewnątrz elementu <dependency>.
Na przykład:
Źródła: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm
źródło
install
celu w zależnym projekcie. Często posiadanie systemu z przerwami powietrznymi i posiadanie wszystkich wtyczek oprócz wtyczki instalacyjnej jest dość rzadką sytuacją."The POM for … is missing, no dependency information available” even though it exists in Maven Repository
Podręcznik Maven mówi, aby zrobić to:
źródło
aktualizacja Od tego czasu właśnie zainstalowaliśmy nasz własny serwer Nexus, znacznie łatwiejszy i czystszy.
W naszej firmie mieliśmy kilka słoików, które były powszechne, ale nie były hostowane w żadnym repozytorium maven, ani nie chcieliśmy mieć ich w lokalnym magazynie. Stworzyliśmy bardzo proste repozytorium mvn (publiczne) na Github (ale możesz je hostować na dowolnym serwerze lub lokalnie):
pamiętaj, że jest to idealne tylko do zarządzania kilkoma rzadko zmienianymi plikami jar
Utwórz repozytorium na GitHub:
https://github.com/<user_name>/mvn-repo/
Dodaj repozytorium w pom.xml
(zwróć uwagę, że plik raw z pełną ścieżką będzie nieco inny niż nazwa repozytorium)
Dodaj zależność do hosta (Github lub serwer prywatny)
a. Wszystko, co musisz wiedzieć, to że pliki są przechowywane we wzorcu wspomnianym przez @glitch
/groupId/artifactId/version/artifactId-version.jar
b. Na swoim hoście utwórz foldery pasujące do tego wzorca.
tzn. jeśli masz plik jar o nazwie
service-sdk-0.0.1.jar
, utwórz folderservice-sdk/service-sdk/0.0.1/
i umieść w nim plik jarservice-sdk-0.0.1.jar
.do. Przetestuj, próbując pobrać jar z przeglądarki (w naszym przypadku:
https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar
Dodaj zależność do pliku pom.xml:
Cieszyć się
źródło
Nie używaj systemPath. W przeciwieństwie do tego, co ludzie tutaj powiedzieli, możesz umieścić zewnętrzny jar w folderze w wyewidencjonowanym katalogu projektu i Maven nie znajdzie go tak, jak inne zależności. Oto dwa kluczowe kroki:
Jest to dość proste, a przykład krok po kroku można znaleźć tutaj: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html
źródło
Maven sposób na dodanie słoików innych niż Maven do projektu Maven
Maven Project i non maven słoiki
Dodaj wtyczki do instalacji maven w sekcji kompilacji
Dodaj zależność
Referencje Uwaga Jestem właścicielem bloga
źródło
Jeśli napotkasz ten sam problem i używasz spring-boot v1.4 + , możesz to zrobić w ten sposób.
Istnieje includeSystemScope , którego można użyć do dodania zależności zakresu systemu do pliku jar.
na przykład
W moim projekcie używam sterownika Oracle.
następnie wykonaj includeSystemScope = true, aby dołączyć plik jar do ścieżki / BOOT-INF / lib / **
i wykluczyć z zasobów, aby uniknąć powielania, słoik jest wystarczająco gruby ~
Powodzenia!
źródło
Zmień ścieżkę systemową .
źródło
Pom.xml zajrzy do lokalnego repozytorium, aby spróbować znaleźć zależność, która pasuje do twojego artefaktu. Nie powinieneś także używać atrybutów zakresu systemowego ani atrybutów systemPath, są one zwykle zarezerwowane dla elementów znajdujących się w JDK, a nie JRE
Zobacz to pytanie, aby dowiedzieć się, jak zainstalować artefakty Mavena.
źródło
Zwróć uwagę, że wszystkie przykłady używają
wymagają zewnętrznego
otaczające tagi. Z niektórych przykładów nie wynika jasno.
źródło
Najlepszym rozwiązaniem jest tutaj instalacja repozytorium: Nexus lub Artifactory. Jeśli daje ci miejsce do umieszczania takich rzeczy, a ponadto przyspiesza to, buforując twoje rzeczy z zewnątrz.
Jeśli masz do czynienia z oprogramowaniem typu open source, możesz również rozważyć umieszczenie go w pliku centralnym.
Zobacz przewodnik .
źródło
Z Eclipse Oxygen możesz wykonać następujące czynności:
Maven weźmie je podczas instalacji projektu.
źródło
Jeśli zewnętrzny plik jar jest tworzony tylko przez projekt Maven, możesz skopiować cały projekt do swojego systemu i uruchomić plik
w katalogu projektu. Spowoduje to dodanie pliku jar do katalogu .m2, który jest lokalnym repozytorium maven.
Teraz możesz dodać
To zapewni, że ty
Pracuje. Jeśli używasz sugerowanych tutaj
Następnie będziesz musiał dodawać klasy indywidualnie, używając wykonywania z wiersza poleceń.
Możesz dodać zewnętrzne słoiki za pomocą następującego polecenia opisanego tutaj
źródło
Najbardziej wydajnym i najczystszym sposobem rozwiązania tego problemu, jaki znalazłem, jest użycie pakietów Github
Utwórz proste, puste repozytorium publiczne / prywatne na GitHub zgodnie z wymaganiami, niezależnie od tego, czy chcesz, aby Twój zewnętrzny jar był publicznie hostowany, czy nie.
Uruchom poniżej komendę maven, aby wdrożyć zewnętrzny jar w powyższym repozytorium github
mvn deploy:deploy-file \ -DgroupId= your-group-id \ -DartifactId= your-artifact-id \ -Dversion= 1.0.0 -Dpackaging= jar -Dfile= path-to-file \ -DrepositoryId= id-to-map-on-server-section-of-settings.xml \ -Durl=https://maven.pkg.github.com/github-username/github-reponame-created-in-above-step
Powyższe polecenie wdroży zewnętrzny jar w repozytorium GitHub, o którym mowa w
-Durl=
. Możesz odnieść się do tego łącza w temacie Jak wdrażać zależności jako Pakiety GitHub Samouczek wdrażania pakietu GitHubPo tym można dodać zależność użyciu
groupId
,artifactId
aversion
wymienione w powyższym etapie w Mavenpom.xml
i metęmvn install
Maven pobierze zależność zewnętrznego pliku jar z rejestru pakietów GitHub i udostępni w Twoim projekcie maven.
Aby to zadziałało, musisz również skonfigurować maven
settings.xml
do pobierania z rejestru pakietów GitHub.źródło