Pobierz źródłowe pliki jar dołączone do Eclipse dla zależności zarządzanych przez Maven

176

Używam Maven (i Maven Eclipse Integration) do zarządzania zależnościami dla moich projektów Java w Eclipse. Funkcja automatycznego pobierania plików JAR z repozytoriów Maven to oszczędność czasu rzeczywistego. Niestety nie zawiera dokumentacji API i kodu źródłowego.

Jak skonfigurować Mavena, aby automatycznie pobierał również załączniki źródłowe i javadoc oraz poprawnie je rejestrował w Eclipse?

Thilo
źródło
Powiązane pytanie z pytaniem, jak zawsze pobierać źródła i javadoc podczas korzystania z maven: stackoverflow.com/questions/5780758/…
Flow

Odpowiedzi:

226

Jestem pewien, że wtyczka m2eclipse Maven do Eclipse - odwrotnie - może to zrobić. Możesz go skonfigurować tak, aby automatycznie pobierał zarówno pliki źródłowe, jak i javadoc.

Można to osiągnąć, przechodząc do opcji Okno> Preferencje> Maven i zaznaczając opcje „Pobierz źródła artefaktów” i „Pobierz artefakt JavaDoc”.

Zrzut ekranu preferencji Maven

mrembisz
źródło
Tak, właśnie zacząłem używać m2eclipse i zajmuje się tym (i wieloma innymi rzeczami).
Thilo
44
Żadna z tych odpowiedzi nie jest odpowiedzią. Dlaczego są wybierani? Mogłem pobrać źródła, klikając projekt w widoku Nawigatora z naciśniętym klawiszem Control i wybierając „m2 Maven” -> „Źródła pobierania”. Następnie mogłem kliknąć klasę z naciśniętym klawiszem Command (Mac), aby przejść do połączonego źródła.
Alex Worden
8
Wygląda na to, że jeśli skompilowany plik JAR został już pobrany, Eclipse nie spróbuje natychmiast pobrać źródłowego / Javadoc JAR. Wygląda na to, że modyfikowanie POM zawierającego zależność od POM, dla których chcę, aby źródło / Javadoc w Eclipse i zapisanie POM, pobierało źródło / Javadoc dla zależności, nawet jeśli skompilowany JAR jest już w pamięci podręcznej repozytorium Mavena.
Francis Gagné,
13
@Francis - Po dokonaniu powyższej zmiany kliknij prawym przyciskiem myszy swój projekt i wybierz "Maven> Update Project ..." Spowoduje to pobranie plików źródłowych.
carbontax
3
Zamiast pobierać źródła dla wszystkich zależności, czy można pobrać tylko dla niektórych zależności, określając je w pom wraz z samą zależnością, czy może b za pomocą jakiegoś wewnętrznego tagu w tagu zależności lub czegoś podobnego?
nanosoft
127
mvn eclipse:eclipse -DdownloadSources=true

lub

mvn eclipse:eclipse -DdownloadJavadocs=true

lub możesz dodać obie flagi, jak wskazuje Spencer K.

Dodatkowo =trueporcja nie jest wymagana, więc możesz użyć

mvn eclipse:eclipse -DdownloadSources -DdownloadJavadocs
Stephen Denne
źródło
8
lub oba! mvn eclipse: eclipse -DdownloadSources = true -DdownloadJavadocs = true Działa to tylko wtedy, gdy źródło i javadocs zostały dostarczone do repozytorium, z którego pobierasz. Czasami nie są dostarczane jak wiosna.
Spencer Kormos
2
Teraz dostarcza ich wiosna.
Robin Green,
Zauważ, że ta odpowiedź ma więcej niż 10 lat. Użyj wtyczki m2e w eclipse, zamiast zmuszać maven do tworzenia plików konfiguracyjnych eclipse.
Thorbjørn Ravn Andersen
71

Inne odpowiedzi w tej pracy, ale jeśli chcesz uniknąć konieczności zapamiętywania argumentów wiersza poleceń, możesz również po prostu dodać do downloadSources i downloadJavadocs config do sekcji maven-eclipse-plugin w swoim pom.xml:

<project>
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                    ... other stuff ...
                </configuration>
            </plugin>
        </plugins>
    </build>
    ...
</project>
przemyślenie
źródło
czy byłbym w stanie ustawić to na poziomie zależności?
marcorossi
@marcorossi Przepraszamy, nie jestem pewien, czy to możliwe.
przemyślenie
Nie jestem przekonany, że to właściwe. Z pewnością ustawienia źródła i pobierania Javadoc są preferencjami użytkownika, a nie problemem na poziomie projektu? Zobacz moją odpowiedź poniżej, jak umieścić to w settings.xmlpliku.
Duncan Jones
Otrzymałem ostrzeżenie: [OSTRZEŻENIE] „build.plugins.plugin.version” dla org.apache.maven.plugins: brak wtyczki maven-eclipse. Aby to naprawić, możesz dodać coś takiego poniżej <artifactId>: <version> 2.9 </version>
Christiaan
16

Wolę nie umieszczać ustawień pobierania źródła / Javadoc w pom.xmlpliku projektu , ponieważ uważam, że są to preferencje użytkownika, a nie właściwości projektu. Zamiast tego umieszczam je w profilu w moim settings.xmlpliku:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <profiles>
    <profile>
      <id>sources-and-javadocs</id>
      <properties>
        <downloadSources>true</downloadSources>
        <downloadJavadocs>true</downloadJavadocs>
      </properties>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>sources-and-javadocs</activeProfile>
  </activeProfiles>
</settings>
Duncan Jones
źródło
1
Skopiowałem ten plik settings.xml w .m2, ale źródła i javadocs nie są kopiowane. Poniższe polecenie jawnie w interfejsie CLI przenosi jednak źródła i javadoc: zależność mvn: zależność źródeł: rozwiązywanie -Dclassifier = javadoc Jakieś myśli?
Arun Gupta
Może to działa, ale proszę wyjaśnić, w jaki sposób wtyczka maven eclipse ma znaleźć te ustawienia konfiguracyjne? Myślisz, że szuka globalnych nieruchomości?
chrisinmtown
9

Kliknij prawym przyciskiem myszy projekt -> maven -> źródła pobierania

sumeet
źródło
3
Wszyscy mówili, jak to włączyć, a nie jak zmusić mavena do pobierania źródeł! po włączeniu opcji
Chad
8

Jeśli słoiki źródłowe znajdują się w repozytorium lokalnym i używasz obsługi maven Eclipses, źródła są automatycznie dołączane. Możesz uruchomić, mvn dependency:sourcesaby pobrać wszystkie pliki JAR ze źródłami dla danego projektu. Nie wiem jednak, jak zrobić to samo z dokumentacją.

Wytrzymały
źródło
To zadziałało dla mnie. Po uruchomieniu mvn dependency:sourcesmogłem kliknąć w Eclipse, aby odczytać źródło. Nie jest wymagane dodatkowe mycie za pomocą m2e. Aby pobrać javadocs, które robisz mvn dependency:sources -Dclassifier=javadoc.
Mat Gessel
4

Jeśli używasz meclipse, zrób

okno -> maven -> Pobierz źródła artefaktów (zaznacz zaznacz)

(Jeśli nadal otrzymujesz okno załączania źródła, kliknij przycisk dołączania pliku i zamknij okno załączania źródła. Następnym razem, gdy spróbujesz zobaczyć źródło, otworzy się poprawne źródło)

Surajz

surajz
źródło
3

Jest też podobne pytanie, które odpowiada na to i obejmuje przykładowe ustawienia pom.

andrel
źródło
3

Próbowałem windows-> pref ..-> Maven Ale to nie wyszło. Dlatego utworzyłem nową ścieżkę klas za pomocą polecenia mvn eclipse: eclipse -DdownloadSources = true i raz odświeżyłem obszar roboczy. voila .. Źródła zostały załączone.

Wpis źródła jar jest dostępny w ścieżce klasy. Dlatego nowa wersja rozwiązała problem ...

om39a
źródło
Dzięki twojemu rozwiązaniu mogę wybrać i wybrać moduł, dla którego chcę uzyskać źródła. Po prostu cd do tego modułu i skompiluj za pomocą "mvn eclipse: clean eclipse: eclipse -DdownloadSources = true -T4 -Dmaven.test.skip = true -Denforcer.skip = true". Dzięki :)
vishwarajanand
2

w mojej wersji Eclipse helios z m2Eclipse nie ma

window --> maven --> Download Artifact Sources (select check)

Pod oknem jest tylko „nowe okno”, „nowy edytor” „otwarta perspektywa” itd.

Jeśli klikniesz prawym przyciskiem myszy na swoim projekcie, wybierz maven -> źródła pobierania

Nic się nie dzieje. żadne źródła nie są pobierane, żadne pliki pom nie są aktualizowane, nie pojawia się okno z pytaniem, które źródła.

Wykonywanie mvn xxx poza eclipse jest niebezpieczne - niektóre polecenia nie działają z m2ecilpse - zrobiłem to raz i straciłem cały projekt, musiałem przeinstalować eclipse i zacząć od zera.

Nadal szukam sposobu, aby ecilpse i maven znaleźć i używać źródła zewnętrznych plików jar, takich jak servlet-api.

nakrętka motylkowa
źródło
2

Zmiana pom dla maven-eclipse-plugin tak, aby zawierała source / javadoc, wystarczy zastosować dla nowych zależności dodawanych do pom. Jeśli musimy ubiegać się o istniejące zależności, musimy uruchomić zależność mvn: sources. Sprawdziłem to.

bnguyen82
źródło
2

Sprawdzanie źródła pobierania / javadoc w preferencjach Eclipse-Maven czasami nie wystarcza. W przypadku, gdy maven z jakiegoś powodu nie mógł ich pobrać (awaria sieci?), Maven tworzy jakieś pliki * .lastUpdated, po czym nigdy nie pobierze ich ponownie. Moim rozwiązaniem empirycznym było usunięcie katalogu artefaktów z .m2 / repozytorium i ponowne uruchomienie obszaru roboczego eclipse ze sprawdzonym źródłem pobierania / javadoc i sprawdzeniem aktualizacji projektów przy starcie. Po ponownym uruchomieniu obszaru roboczego, być może niektóre projekty mogą zostać oznaczone jako błędne, podczas gdy postęp zaćmienia jest pobierany, każdy błąd zostanie usunięty. Może ta procedura nie jest aż tak „naukowa”, ale mi się udało.

user17417
źródło
1

Dodałem konfigurację pom do wtyczki maven-eclipse w celu pobrania źródła i javadoców, ale myślę / mam nadzieję, że stanie się to dla nowych zależności, a nie istniejących.

W przypadku istniejących zależności przejrzałem w eksploratorze pakietów do „Zależności Mavena” i kliknąłem prawym przyciskiem myszy na plik commons-lang-2.5.jar, wybrano Maven | Pobierz źródła i ... nic się nie wydarzyło (brak paska postępu lub wskazanie, że coś robi). Jednak udało mi się pobrać, ponieważ jestem teraz w stanie przeskoczyć do źródła we wspólnym języku.

wyjątkowy72
źródło
1

overthink zasugerował użycie konfiguracji w pom:

<project>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <configuration>
                <downloadSources>true</downloadSources>
                <downloadJavadocs>true</downloadJavadocs>
                ... other stuff ...
            </configuration>
        </plugin>
    </plgins>
</build>
...

Najpierw pomyślałem, że to nadal nie będzie dołączać javadoc i źródeł (jak wcześniej bezskutecznie próbowałem z tą opcją -DdownloadSources).

Ale niespodzianka - plik .classpath JEST pobiera źródła i dołącza javadoc podczas korzystania z wariantu POM!

jhohlfeld
źródło
1

W przypadku Indigo (i prawdopodobnie Heliosa) powyższe pola wyboru znajdują się tutaj:

Okno -> Preferencje -> Maven

Chris Romine
źródło
0

Miałem podobny problem, a rozwiązaniem, które działało najlepiej, było umieszczenie źródła w tym samym pliku jar co skompilowany kod (więc dany katalog w jar zawierałby oba Foo.javai Foo.class). Eclipse automatycznie kojarzy źródło ze skompilowanym kodem i automatycznie dostarcza JavaDoc ze źródła. Oczywiście jest to przydatne tylko wtedy, gdy kontrolujesz artefakt.

Dan R.
źródło
0

Po ustawieniu właściwości na poziomie projektu lub właściwości użytkownika, wykonaj Maven -> Aktualizuj projekt (wymuś aktualizację). Pobiera źródła

arkabhi
źródło