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ć.

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>

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>

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.


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 ?!


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)


Chciałbym sam utrzymać zależność. To jest biblioteka wewnętrzna.
— Milhous
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.