Dodaj zależność w Maven

134

Jak pobrać plik jar, który posiadam i dodać go do systemu zależności w maven 2? Będę opiekunem tej zależności, a mój kod potrzebuje tego jar w ścieżce klasy, aby mógł się skompilować.

Milhous
źródło

Odpowiedzi:

139

Musisz to zrobić w dwóch krokach:

1. Nadaj plikowi JAR groupId, artifactId i wersję i dodaj je do repozytorium.

Jeśli nie masz repozytorium wewnętrznego i próbujesz tylko dodać plik JAR do repozytorium lokalnego, możesz go zainstalować w następujący sposób, używając dowolnego dowolnego groupId / artifactIds:

mvn install:install-file -DgroupId=com.stackoverflow... -DartifactId=yourartifactid... -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/jarfile

Możesz również wdrożyć je w swoim wewnętrznym repozytorium, jeśli je masz, i chcesz udostępnić je innym programistom w Twojej organizacji. Po prostu używam interfejsu internetowego mojego repozytorium do dodawania artefaktów, ale powinieneś być w stanie osiągnąć to samo, używając mvn deploy:deploy-file ....

2. Zaktualizuj projekty zależne, aby odwoływały się do tego pliku JAR.

Następnie zaktualizuj zależność w pom.xml projektów, które używają pliku JAR, dodając następujący element do elementu:

<dependencies>
    ...
    <dependency>
        <groupId>com.stackoverflow...</groupId>
        <artifactId>artifactId...</artifactId>
        <version>1.0</version>
    </dependency>
    ...
</dependencies>
Jack Leow
źródło
3
Czy możesz dodać więcej szczegółów dotyczących wdrożenia? Mamy wewnętrzne repozytorium i chcę wdrożyć w nim mój lokalny plik jar, aby inni programiści i nasz serwer kompilacji również otrzymali plik jar.
Kieveli
Ta odpowiedź powinna dostać wszystkie polubienia! Użyłem tego, aby pomyślnie dodać zależności do moich projektów maven zarówno w Google App Engine, jak i Heroku.
Leo C Han
93

Możesz również określić zależność, której nie ma w repozytorium maven. Może się przydać, gdy nie istnieje centralne repozytorium Maven dla twojego zespołu lub jeśli masz serwer CI

    <dependency>
        <groupId>com.stackoverflow</groupId>
        <artifactId>commons-utils</artifactId>
        <version>1.3</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/commons-utils.jar</systemPath>
    </dependency>
Frederic Morin
źródło
4
Czy mogę polegać na innym pliku pom zamiast słoika?
Jayen
45

Właściwie, badając to, myślę, że wszystkie te odpowiedzi są nieprawidłowe. Twoje pytanie jest mylące ze względu na nasz poziom zrozumienia maven. Mówię „nasze”, bo dopiero się przedstawiam maven.

W programie Eclipse, jeśli chcesz dodać plik jar do projektu, zwykle pobierasz plik jar ręcznie, a następnie upuszczasz go do katalogu lib . Z maven nie robisz tego w ten sposób. Oto co robisz:

  • Przejdź do mvnrepository
  • Wyszukaj bibliotekę, którą chcesz dodać
  • Skopiuj dependencyoświadczenie do swojegopom.xml
  • odbudować za pośrednictwem mvn

Teraz mavenpołączy się i pobierze jarwraz z listą zależności i automatycznie rozwiąże wszelkie dodatkowe zależności, które jarmogły mieć. Więc jeśli jarpotrzebne jest również wspólne logowanie, to również zostanie pobrane.

Kieveli
źródło
5
Używam Spring Tool Suite (zbudowanego na Eclipse). Po krokach 1 i 2 w powyższym rozwiązaniu: 1. Otwórz pom.xml w edytorze STS, kliknij zakładkę "Zależności" u dołu 2. Kliknij "Dodaj" w grupie Zależności 3. Skopiuj / wklej informacje o zależnościach zakładki "Maven" z okna przeglądarki ( groupId, artifactId, version) do odpowiednich pól w wyskakującym okienku „Select Dependency” w STS 4. Kliknij OK 5. Zapisz pom.xml Po zapisaniu mój katalog maven na dysku twardym i ustawienie zależności maven w STS jest aktualizowane w ciągu kilku sekund. Możesz edytować plik .xml bezpośrednio, ale użycie tego narzędzia może pomóc uniknąć problemów z formatem xml.
Chris R
2
Jest to rzeczywiście preferowany sposób robienia rzeczy, ale są sytuacje, w których nie możesz tego zrobić (np. Prawnie zastrzeżony jar nie na mvnrepository). W takim przypadku będziesz potrzebować sposobu, aby dodać go „ręcznie”, w którym to przypadku inna odpowiedź będzie miała rozwiązanie.
Thunderforge,
Możliwe też, że zadane pytanie nie było pytaniem dla początkujących. Umieszczam to dla osób, które chcą coś zrobić bez odpowiedniego sformułowania, które pochodzi z czasu spędzonego z mavenem. (Tak jak wtedy)
Kieveli
KISS Dziękuję, przeczytałem, że jest to odpowiednik C # Nuget w Javie, ale próbowałem dowiedzieć się, który przycisk kliknąć lub cmd, aby uruchomić. Nie do końca 1: 1, ale spełnia swoje zadanie.
Terrance
Jak przebudować projekt w Maven w IntelleJ?
Irfan Nasim
14

Zrobiłbym to:

  1. dodaj zależność, jak chcesz w swoim pom:

    <dependency>
            <groupId>com.stackoverflow...</groupId>
            <artifactId>artifactId...</artifactId>
            <version>1.0</version>
    </dependency>

  2. uruchom mvn install, spróbuje pobrać plik jar i zakończy się niepowodzeniem. W trakcie tego procesu otrzymasz pełne polecenie instalacji słoika z komunikatem o błędzie. Skopiuj to polecenie i uruchom je! łatwe prawda ?!

user40032
źródło
3

Zakładam, że pytasz, jak wypchnąć zależność do „dobrze znanego repozytorium”, a nie po prostu pytasz, jak zaktualizować POM.

Jeśli tak, to właśnie chcesz przeczytać.

A dla każdego, kto chce skonfigurować wewnętrzny serwer repozytorium, spójrz tutaj (połowa problemu z używaniem Maven 2 polega na znalezieniu dokumentów)

kdgregory
źródło
Chciałbym sam utrzymać zależność. To jest biblioteka wewnętrzna.
Milhous