Dapatkan file jar sumber terlampir ke Eclipse untuk dependensi yang dikelola Maven

176

Saya menggunakan Maven (dan Integrasi Maven Eclipse) untuk mengelola dependensi untuk proyek Java saya di Eclipse. Fitur unduhan otomatis untuk file JAR dari repositori Maven adalah penghemat waktu nyata. Sayangnya, itu tidak termasuk dokumentasi API dan kode sumber.

Bagaimana saya mengatur Maven untuk secara otomatis juga mendapatkan lampiran sumber dan javadoc dan mendaftarkannya dengan benar ke Eclipse?

Thilo
sumber
Pertanyaan terkait yang menanyakan cara selalu mengunduh sumber dan javadoc saat menggunakan maven: stackoverflow.com/questions/5780758/…
Flow

Jawaban:

226

Saya yakin plugin Maven m2eclipse untuk Eclipse - sebaliknya - bisa melakukannya. Anda dapat mengonfigurasinya untuk mengunduh file sumber dan javadoc secara otomatis untuk Anda.

Ini dicapai dengan masuk ke Window> Preferences> Maven dan memeriksa opsi "Unduh Sumber Artefak" dan "Unduh Artefak JavaDoc".

Cuplikan layar Preferensi Maven

mrembisz
sumber
Ya, saya baru saja mulai menggunakan m2eclipse, dan memang butuh mobil ini (dan banyak hal lainnya).
Thilo
44
Tak satu pun dari jawaban ini adalah jawaban. Mengapa mereka dipilih? Saya dapat mengunduh sumber dengan mengklik kontrol proyek dalam tampilan Navigator dan memilih "m2 Maven" -> "Unduh Sumber". Saya kemudian dapat mengklik perintah (mac) di kelas untuk menavigasi ke sumber yang ditautkan.
Alex Worden
8
Tampaknya jika JAR yang dikompilasi telah diunduh, Eclipse tidak akan mencoba untuk mendapatkan JAR sumber / Javadoc segera. Tampaknya memodifikasi POM yang berisi ketergantungan pada POM yang saya inginkan sumber / Javadoc di Eclipse dan menyimpan POM mengunduh sumber / Javadoc untuk dependensi, bahkan jika JAR yang dikompilasi sudah dalam cache repositori Maven.
Francis Gagné
13
@ Francis - Setelah melakukan perubahan di atas klik kanan pada proyek Anda dan pilih "Maven> Perbarui Proyek ..." Ini akan menyebabkan guci sumber Anda untuk diunduh.
carbontax
3
Alih-alih mengunduh sumber untuk semua dependensi, mungkinkah mengunduh hanya untuk beberapa dependensi dengan menentukannya dalam pom bersama dengan dependensi itu sendiri, dapatkah b melalui tag dalam pada tag dependensi atau yang serupa?
nanosoft
127
mvn eclipse:eclipse -DdownloadSources=true

atau

mvn eclipse:eclipse -DdownloadJavadocs=true

atau Anda dapat menambahkan kedua bendera, seperti yang ditunjukkan Spencer K.

Selain itu, =trueporsinya tidak diperlukan, jadi Anda bisa menggunakannya

mvn eclipse:eclipse -DdownloadSources -DdownloadJavadocs
Stephen Denne
sumber
8
atau keduanya! mvn eclipse: eclipse -DdownloadSources = true -DdownloadJavadocs = true Ini hanya berfungsi jika sumber dan javadocs disediakan untuk repo yang Anda unduh. Terkadang mereka tidak disediakan seperti Spring.
Spencer Kormos
2
Spring sekarang menyediakannya.
Robin Green
Perhatikan bahwa jawaban ini lebih dari 10 tahun. Gunakan plugin m2e di eclipse alih-alih meminta pakar membuat file konfigurasi eclipse.
Thorbjørn Ravn Andersen
71

Jawaban lain pada pekerjaan ini, tetapi jika Anda ingin menghindari harus mengingat argumen baris perintah, Anda juga bisa menambahkan ke unduhan Source dan unduh config javadocs ke bagian plugin maven-eclipse-plugin di pom.xml Anda:

<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>
terlalu banyak berpikir
sumber
Apakah saya dapat mengatur ini pada tingkat per-ketergantungan?
marcorossi
@marcorossi Maaf, saya tidak yakin apakah itu mungkin.
overthink
Saya tidak yakin ini pantas. Tentunya pengaturan unduhan sumber dan Javadoc adalah preferensi pengguna, bukan masalah tingkat proyek? Lihat jawaban saya di bawah ini untuk cara menempatkan ini di settings.xmlfile.
Duncan Jones
Saya mendapat peringatan ini: [PERINGATAN] 'build.plugins.plugin.version' untuk org.apache.maven.plugins: maven-eclipse-plugin tidak ada. Untuk memperbaikinya Anda dapat menambahkan sesuatu seperti ini di bawah ini <artifactId>: <version> 2.9 </version>
Christiaan
16

Saya lebih suka untuk tidak memasukkan pengaturan unduhan source / Javadoc ke dalam pom.xmlfile proyek karena saya rasa ini adalah preferensi pengguna, bukan properti proyek. Sebagai gantinya, saya menempatkan mereka di profil di settings.xmlfile saya :

<?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
sumber
1
Saya menyalin pengaturan ini.xml dalam .m2 namun sumber dan javadocs tidak disalin. Perintah berikut secara eksplisit pada CLI membawa alih sumber dan javadocs: mvn dependensi: dependensi sumber: resolusikan -Dclassifier = javadoc Ada pemikiran?
Arun Gupta
Mungkin ini berfungsi, tapi tolong jelaskan, bagaimana plugin maven eclipse seharusnya menemukan pengaturan konfigurasi ini? Anda pikir itu mencari properti global?
chrisinmtown
9

Klik kanan pada proyek -> pakar -> sumber unduhan

sumeet
sumber
3
Semua orang mengatakan bagaimana mengaktifkannya, bukan cara membuat pakar untuk mengunduh sumber! setelah mengaktifkan opsi
Chad
8

Jika guci sumber berada di repositori lokal dan Anda menggunakan dukungan Eclipses maven sumber mendapatkan secara otomatis terlampir. Anda dapat menjalankan mvn dependency:sourcesuntuk mengunduh semua stoples sumber untuk proyek yang diberikan. Tidak yakin bagaimana melakukan hal yang sama dengan dokumentasi.

Kuat
sumber
Ini berhasil untuk saya. Setelah berjalan mvn dependency:sources, saya dapat mengklik di Eclipse untuk membaca sumber. Tidak diperlukan mucking tambahan dengan m2e. Untuk mengunduh javadocs yang Anda lakukan mvn dependency:sources -Dclassifier=javadoc.
Mat Gessel
4

Jika Anda menggunakan meclipse, lakukan

window -> pakar -> Unduh Sumber Artefak (pilih centang)

(Jika Anda masih mendapatkan jendela sumber lampirkan, lalu klik tombol lampirkan file dan tutup jendela sumber lampirkan. Lain kali Anda mencoba melihat sumber itu akan membuka sumber yang benar)

Surajz

surajz
sumber
3

Ada juga pertanyaan serupa yang menjawab ini dan termasuk contoh pengaturan pom.

andrel
sumber
3

Saya mencoba windows-> pref ..-> Maven Tapi tidak berhasil. Oleh karena itu saya membuat jalur kelas baru dengan perintah mvn eclipse: eclipse -DdownloadSources = true dan menyegarkan ruang kerja sekali. voila .. Sumber terlampir.

Entri jar sumber tersedia di jalur kelas. Karenanya build baru memecahkan masalah ...

om39a
sumber
Dengan solusi Anda, saya dapat memilih dan memilih modul yang ingin saya dapatkan sumbernya. Cukup masukkan ke dalam modul itu dan bangun dengan "mvn eclipse: clean eclipse: eclipse -DdownloadSources = true -T4 -Dmaven.test.skip = true -Denforcer.skip = true". Terima kasih :)
vishwarajanand
2

dalam versi saya Eclipse helios dengan m2Eclipse tidak ada

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

Di bawah jendela hanya "jendela baru", "editor baru" "perspektif terbuka" dll.

Jika Anda mengklik kanan pada proyek Anda, lalu pilih maven -> sumber unduhan

Tidak ada yang terjadi. tidak ada sumber yang diunduh, tidak ada file pom yang diperbarui, tidak ada jendela yang muncul menanyakan sumber mana.

Melakukan mvn xxx di luar gerhana berbahaya - beberapa perintah tidak berfungsi dengan m2ecilpse - saya pernah melakukannya dan kehilangan seluruh proyek, harus menginstal ulang gerhana dan mulai dari awal.

Saya masih mencari cara untuk mendapatkan ecilpse dan pakar untuk menemukan dan menggunakan sumber guci eksternal seperti servlet-api.

kacang sayap
sumber
2

Mengubah pom untuk plugin maven-eclipse-untuk memasukkan sumber / javadoc hanya berlaku untuk dependensi baru yang ditambahkan ke pom. Jika kita perlu menerapkan dependensi yang ada, kita harus menjalankan mvn dependency: sources. Saya memeriksa ini.

bnguyen82
sumber
2

Memeriksa sumber unduhan / javadoc dalam preferensi Eclipse-Maven, terkadang tidak cukup. Jika maven gagal mengunduhnya karena suatu alasan (pemadaman jaringan?), Maven membuat beberapa file * .lastUpdated, kemudian tidak akan pernah mengunduhnya lagi. Solusi empiris saya adalah menghapus direktori artifact dari .m2 / repository, dan restart ruang kerja gerhana dengan sumber unduhan / javadoc diperiksa dan perbarui proyek saat startup diperiksa juga. Setelah ruang kerja telah dimulai kembali, mungkin beberapa proyek dapat ditandai sebagai kesalahan, sementara kemajuan gerhana sedang mengunduh, maka kesalahan apa pun akan dihapus. Mungkin prosedur ini tidak terlalu "ilmiah", tetapi bagi saya memang berhasil.

pengguna17417
sumber
1

Saya telah menambahkan konfigurasi pom ke plugin maven-eclipse untuk mengunduh sumber dan javadocs, tetapi saya pikir / harapan itu akan terjadi untuk dependensi baru, bukan yang sudah ada.

Untuk dependensi yang ada, saya melihat-lihat dalam paket explorer ke "Maven Dependencies" dan mengklik kanan pada commons-lang-2.5.jar, Maven yang dipilih | Unduh Sumber dan ... sepertinya tidak ada yang terjadi (tidak ada bilah progres atau indikasi bahwa ia melakukan sesuatu). Namun, itu mengunduh karena saya dapat melompat ke sumber di commons-lang sekarang.

unik72
sumber
1

overthink disarankan menggunakan pengaturan di 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>
...

Pertama saya pikir ini masih tidak akan melampirkan javadoc dan sumber (karena saya mencoba gagal dengan opsi -DdownloadSources sebelumnya).

Tapi mengejutkan - file .classpath IS mendapatkan sumbernya dan javadoc terpasang ketika menggunakan varian POM!

jhohlfeld
sumber
1

Untuk Indigo (dan mungkin Helios), kotak centang yang disebutkan di atas ada di sini:

Window -> Preferences -> Maven

Chris Romine
sumber
0

Saya memiliki masalah yang sama, dan solusi yang bekerja paling baik bagi saya adalah memasukkan sumber dalam jar yang sama dengan kode yang dikompilasi (jadi direktori tertentu dalam jar itu akan mencakup keduanya Foo.javadan Foo.class). Eclipse secara otomatis mengaitkan sumber dengan kode yang dikompilasi, dan secara otomatis menyediakan JavaDoc dari sumbernya. Jelas, itu hanya membantu jika Anda mengontrol artefak.

Dan R.
sumber
0

Setelah Mengatur Properti baik di Tingkat Proyek atau tingkat Properti Pengguna, Silakan lakukan Maven -> Perbarui Proyek (Paksa Pembaruan). Itu mengunduh sumber

arkabhi
sumber