Bagaimana cara saya memberi tahu Maven untuk menggunakan versi terbaru dari ketergantungan?

788

Di Maven, dependensi biasanya diatur seperti ini:

<dependency>
  <groupId>wonderful-inc</groupId>
  <artifactId>dream-library</artifactId>
  <version>1.2.3</version>
</dependency>

Sekarang, jika Anda bekerja dengan perpustakaan yang memiliki rilis yang sering, memperbarui tag <version> secara terus-menerus bisa agak menjengkelkan. Apakah ada cara untuk memberitahu Maven untuk selalu menggunakan versi terbaru yang tersedia (dari repositori)?

Anders Sandvig
sumber
@ Martin Saya mengetahui tentang konvensi xyz-SNAPSHOT, tetapi saya berpikir tentang perpustakaan yang dirilis dalam versi final ke repositori (mis. Pergi dari dream-library-1.2.3.jar ke dream-library-1.2.4.jar , dan seterusnya).
Anders Sandvig
176
Saya benar-benar tidak merekomendasikan praktik ini (atau menggunakan rentang versi) demi membangun reproduktifitas. Bangunan yang mulai gagal tiba-tiba karena alasan yang tidak diketahui jauh lebih menjengkelkan daripada memperbarui nomor versi secara manual.
Pascal Thivent
12
@PascalThivent Secara manual memperbarui nomor rilis di pom adalah rasa sakit jika Anda melakukan rilis terus menerus. Saya menggunakan plugin versi yang dikombinasikan dengan scm plugin untuk melewati ini (lihat jawaban saya).
Adam Gent
4
@ PascalThivent Keduanya menjengkelkan, tetapi dengan cara yang berbeda. Saya ingin memilih antara keduanya tergantung pada situasi saya dan tidak dipaksa untuk menggunakannya karena orang lain memutuskan ini akan lebih baik.
piegames

Jawaban:

745

CATATAN:

Jawaban ini hanya berlaku untuk Maven 2! Disebutkan LATESTdan RELEASEmetaversions telah dijatuhkan di Maven 3 "demi membangun direproduksi" , lebih dari 6 tahun yang lalu. Silakan merujuk solusi yang sesuai Maven 3 ini .


Jika Anda selalu ingin menggunakan versi terbaru, Maven memiliki dua kata kunci yang dapat Anda gunakan sebagai alternatif untuk rentang versi. Anda harus menggunakan opsi ini dengan hati-hati karena Anda tidak lagi mengontrol plugin / dependensi yang Anda gunakan.

Saat Anda bergantung pada plugin atau dependensi, Anda dapat menggunakan nilai versi TERBARU atau RELEASE. TERBARU mengacu pada versi artifak tertentu yang dirilis atau snapshot terbaru, artefak yang paling terakhir digunakan dalam repositori tertentu. RELEASE mengacu pada rilis non-snapshot terakhir dalam repositori. Secara umum, ini bukan praktik terbaik untuk merancang perangkat lunak yang tergantung pada versi artefak yang tidak spesifik. Jika Anda mengembangkan perangkat lunak, Anda mungkin ingin menggunakan RELEASE atau TERBARU sebagai kenyamanan sehingga Anda tidak perlu memperbarui nomor versi ketika rilis baru perpustakaan pihak ketiga dirilis. Saat Anda merilis perangkat lunak, Anda harus selalu memastikan bahwa proyek Anda bergantung pada versi spesifik untuk mengurangi peluang pembangunan Anda atau proyek Anda terpengaruh oleh rilis perangkat lunak yang tidak berada di bawah kendali Anda.

Lihat bagian Sintaks POM dari buku Maven untuk lebih jelasnya. Atau lihat dokumen ini di Ranges Versi Ketergantungan , di mana:

  • Braket persegi ( [& ]) berarti "tertutup" (inklusif).
  • Tanda kurung ( (& )) berarti "terbuka" (eksklusif).

Berikut ini contoh yang menggambarkan berbagai opsi. Dalam repositori Maven, com.foo:my-foo memiliki metadata berikut:

<?xml version="1.0" encoding="UTF-8"?><metadata>
  <groupId>com.foo</groupId>
  <artifactId>my-foo</artifactId>
  <version>2.0.0</version>
  <versioning>
    <release>1.1.1</release>
    <versions>
      <version>1.0</version>
      <version>1.0.1</version>
      <version>1.1</version>
      <version>1.1.1</version>
      <version>2.0.0</version>
    </versions>
    <lastUpdated>20090722140000</lastUpdated>
  </versioning>
</metadata>

Jika ketergantungan pada artifak itu diperlukan, Anda memiliki opsi berikut ( tentu saja rentang versi lain , hanya menunjukkan yang relevan di sini):

Nyatakan versi persisnya (akan selalu diselesaikan pada 1.0.1):

<version>[1.0.1]</version>

Nyatakan versi eksplisit (akan selalu diselesaikan pada 1.0.1 kecuali terjadi tabrakan, ketika Maven akan memilih versi yang cocok):

<version>1.0.1</version>

Nyatakan rentang versi untuk semua 1.x (saat ini akan diselesaikan ke 1.1.1):

<version>[1.0.0,2.0.0)</version>

Nyatakan rentang versi terbuka (akan beralih ke 2.0.0):

<version>[1.0.0,)</version>

Deklarasikan versi sebagai TERBARU (akan menyelesaikan ke 2.0.0) (dihapus dari maven 3.x)

<version>LATEST</version>

Deklarasikan versi sebagai RELEASE (akan menyelesaikan ke 1.1.1) (dihapus dari maven 3.x):

<version>RELEASE</version>

Perhatikan bahwa secara default penyebaran Anda sendiri akan memperbarui entri "terbaru" di metadata Maven, tetapi untuk memperbarui entri "rilis", Anda perlu mengaktifkan "profil rilis" dari MOM super POM . Anda dapat melakukan ini dengan "-Peluang-profil" atau "-DperformRelease = true"


Patut ditekankan bahwa pendekatan apa pun yang memungkinkan Maven untuk memilih versi dependensi (TERBARU, RELEASE, dan rentang versi) dapat membuat Anda terbuka untuk membuat masalah waktu, karena versi yang lebih baru dapat memiliki perilaku yang berbeda (misalnya plugin dependensi sebelumnya telah beralih ke default nilai dari benar ke salah, dengan hasil yang membingungkan).

Oleh karena itu umumnya merupakan ide yang baik untuk mendefinisikan versi yang tepat dalam rilis. Seperti yang ditunjukkan oleh jawaban Tim , plugin-versi-maven adalah alat yang berguna untuk memperbarui versi dependensi, terutama versi - versi: use-latest-versi dan versi: use-latest-rilis goal.

Penjual Kaya
sumber
76
Hai Kaya! Tampaknya RELEASE dan versi TERBARU penanda tidak lagi didukung di Maven 3.x .
Pascal Thivent
16
Penghentian itu tampaknya hanya berlaku untuk plugin daripada dependensi normal jika saya memahami dokumen dengan benar
Mond Raymond
9
@RichSeller, hei Kaya; Saya menghabiskan sedikit waktu untuk hal ini sebelum saya menemukan ini tidak tersedia di Maven 3.0 lagi;) Apakah Anda mempertimbangkan untuk mengedit jawaban sehingga dimulai dengan pembaruan yang menyatakan depreaksi Maven 3.0? Terima kasih banyak!
Miquel
6
Saya percaya keseimbangan yang baik adalah untuk mengunci versi utama tetapi mendapatkan versi minor (atau patch) terbaru (mana yang digunakan untuk perbaikan bug hanya di artifcat Anda tergantung pada). Dengan sintaks saat ini, ini tampaknya hanya mungkin dengan kisaran seperti (catatan: dimulai dengan tanda kurung dan berakhir dengan parens):[1.1,2.0)
Amr Mostafa
2
FWIW ... diperbarui Link ke Maven3 Kompatibilitas Catatan: cwiki.apache.org/confluence/display/MAVEN/...
dyodji
384

Sekarang saya tahu topik ini sudah lama, tetapi membaca pertanyaan dan jawaban yang diberikan OP sepertinya Plugin Versi Maven mungkin sebenarnya jawaban yang lebih baik untuk pertanyaannya:

Secara khusus, tujuan berikut dapat bermanfaat:

  • versi: gunakan-versi terbaru mencari pom untuk semua versi yang merupakan versi yang lebih baru dan menggantinya dengan versi terbaru.
  • versi: use-latest-rilis mencari pom untuk semua versi non-SNAPSHOT yang telah menjadi rilis yang lebih baru dan menggantikannya dengan versi rilis terbaru.
  • versi: properti pembaruan memperbarui properti yang ditentukan dalam suatu proyek sehingga mereka sesuai dengan versi terbaru dari dependensi spesifik. Ini dapat berguna jika serangkaian dependensi harus dikunci ke satu versi.

Tujuan lain berikut juga disediakan:

  • versi: display-dependency-update memindai dependensi proyek dan menghasilkan laporan dependensi yang memiliki versi yang lebih baru.
  • versi: display-plugin-updates memindai plugin proyek dan menghasilkan laporan plugin yang memiliki versi lebih baru.
  • versi: perbarui-induk memperbarui bagian induk dari suatu proyek sehingga referensi versi terbaru yang tersedia. Misalnya, jika Anda menggunakan POM root perusahaan, tujuan ini dapat membantu jika Anda perlu memastikan Anda menggunakan versi terbaru dari POM root perusahaan.
  • versi: perbarui-child-modules memperbarui bagian induk dari modul anak dari suatu proyek sehingga versinya cocok dengan versi proyek saat ini. Misalnya, jika Anda memiliki pom agregator yang juga merupakan induk untuk proyek yang diagregat dan versi anak-anak dan orang tua tidak sinkron, mojo ini dapat membantu memperbaiki versi modul anak. (Catatan Anda mungkin perlu memanggil Maven dengan opsi -N untuk menjalankan tujuan ini jika proyek Anda rusak parah sehingga tidak dapat dibangun karena versi salah-cocok).
  • versi: lock-snapshots mencari pom untuk semua versi -SNAPSHOT dan menggantinya dengan versi cap waktu saat itu -SNAPSHOT, misalnya -20090327.172306-4
  • versi: unlock-snapshots mencari pom untuk semua versi snapshot timestamp yang terkunci dan menggantinya dengan -SNAPSHOT.
  • versi: resol-range menemukan dependensi menggunakan rentang versi dan menyelesaikan rentang ke versi spesifik yang digunakan.
  • versi: gunakan-rilis mencari pom untuk semua -SNAPSHOT versi yang telah dirilis dan menggantinya dengan versi rilis yang sesuai.
  • versi: use-next-rilis mencari pom untuk semua versi non-SNAPSHOT yang telah menjadi rilis yang lebih baru dan menggantikannya dengan versi rilis berikutnya.
  • versi: gunakan-versi berikutnya mencari pom untuk semua versi yang telah menjadi versi yang lebih baru dan menggantinya dengan versi berikutnya.
  • versi: komit menghapus file pom.xml.versionsBackup. Membentuk setengah dari built-in "Poor Man's SCM".
  • versi: kembalikan mengembalikan file pom.xml dari file pom.xml.versionsBackup. Membentuk setengah dari built-in "Poor Man's SCM".

Hanya berpikir saya akan memasukkannya untuk referensi di masa depan.

Tim
sumber
10
Dalam konteks ini, apa perbedaan antara "rilis" dan "versi".
Ben Noland
1
@ BenNoland, saya percaya perbedaan dalam hal ini adalah bahwa versi berikutnya mungkin tidak perlu berupa artefak rilis. Misalnya diberi artefak yang versi 1.0.0-SNAPSHOT, 1.0.0, dan 1.0.1-SNAPSHOT, dan referensi pom ke 1.0.0-SNAPSHOT, versi: versi-berikutnya dan versi: rilis-berikutnya akan menyelesaikan ke 1.0.0 , sedangkan versi: versi terbaru dan versi: rilis terbaru akan menyelesaikan ke 1.0.1-SNAPSHOT dan 1.0.0 dengan hormat.
Ryan Beesley
1
Anda dapat menyelesaikan beberapa ketidakpastian antara versi / rilis / snapshot dalam tabel yang sangat bagus ini di sini: goo.gl/iDq6PK
Ev0oD
1
Mencetak semua tujuan yang mungkin dan tidak terkait tidak membantu.
MariuszS
2
Saya akan berpikir versi: gunakan-versi terbaru memecahkan sebagian besar masalah OP.
Alex R
172

Silakan lihat halaman ini (bagian "Rentang Versi Ketergantungan"). Apa yang mungkin ingin Anda lakukan adalah sesuatu seperti

<version>[1.2.3,)</version>

Rentang versi ini diterapkan di Maven2.

Martin Klinke
sumber
Untuk beberapa alasan, opsi ini tidak berfungsi untuk saya, ia memilih versi di dalam rentang tetapi bukan yang terbaru.
sorin
4
Anda mungkin ingin melihat lebih dekat bagaimana Maven membandingkan nomor versi - jika Anda tidak mengikuti pola ketat yang Maven bandingkan sebagai string dan bukan angka.
Thorbjørn Ravn Andersen
Halaman itu ada di Codehaus, dan menggambarkan dirinya sebagai hal "yang belum diimplementasikan untuk Maven 2.0" ... Dokumentasi Maven itu sendiri tidak mengatakan apa-apa tentang rentang versi. Apakah saya melewatkan sesuatu? Kapan rentang versi diperkenalkan? Di mana mereka dijelaskan dalam dokumentasi resmi?
Shannon
1
Anda salah, rentang versi berarti semua versi OK dari 1.2.3 ke lebih tinggi. Ini bukan versi terbaru sama sekali.
MariuszS
@sorin Apakah Anda mungkin memiliki dependensi lain dalam proyek Anda yang juga bergantung pada artefak yang dimaksud? Coba mvn dependency:tree -Dverbosecari tahu itu. Ini bisa menjelaskan versi yang tidak terduga.
Eugene Beresovsky
83

Tidak seperti yang lain, saya pikir ada banyak alasan mengapa Anda selalu ingin versi terbaru . Terutama jika Anda melakukan penyebaran berkelanjutan (kami terkadang memiliki 5 rilis dalam sehari) dan tidak ingin melakukan proyek multi-modul.

Apa yang saya lakukan adalah membuat Hudson / Jenkins melakukan hal berikut untuk setiap bangunan:

mvn clean versions:use-latest-versions scm:checkin deploy -Dmessage="update versions" -DperformRelease=true

Itu saya menggunakan plugin versi dan scm plugin untuk memperbarui dependensi dan kemudian memeriksanya ke kontrol sumber. Ya saya membiarkan CI saya melakukan checkin SCM (yang harus Anda lakukan tetap untuk plugin rilis pakar).

Anda ingin mengatur plugin versi untuk hanya memperbarui apa yang Anda inginkan:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>versions-maven-plugin</artifactId>
    <version>1.2</version>
    <configuration>
        <includesList>com.snaphop</includesList>
        <generateBackupPoms>false</generateBackupPoms>
        <allowSnapshots>true</allowSnapshots>
    </configuration>
</plugin>

Saya menggunakan plugin rilis untuk melakukan rilis yang menangani -SNAPSHOT dan memvalidasi bahwa ada versi rilis -SNAPSHOT (yang penting).

Jika Anda melakukan apa yang saya lakukan, Anda akan mendapatkan versi terbaru untuk semua build snapshot dan versi rilis terbaru untuk build rilis. Bangunan Anda juga akan dapat direproduksi.

Memperbarui

Saya memperhatikan beberapa komentar yang menanyakan beberapa hal spesifik dari alur kerja ini. Saya akan mengatakan kita tidak menggunakan metode ini lagi dan alasan utama mengapa plugin versi pakar adalah buggy dan secara umum cacat secara inheren.

Itu cacat karena untuk menjalankan plugin versi untuk menyesuaikan versi semua versi yang ada perlu ada agar pom dapat berjalan dengan benar. Itu adalah plugin versi tidak dapat memperbarui ke versi terbaru apa pun jika tidak menemukan versi yang direferensikan di pom. Ini sebenarnya agak mengganggu karena kita sering membersihkan versi lama karena alasan ruang disk.

Benar-benar Anda memerlukan alat terpisah dari pakar untuk menyesuaikan versi (sehingga Anda tidak bergantung pada file pom untuk berjalan dengan benar). Saya telah menulis alat seperti itu dalam bahasa rendahan yaitu Bash. Script akan memperbarui versi seperti plugin versi dan memeriksa pom kembali ke kontrol sumber. Ini juga berjalan seperti 100x lebih cepat daripada plugin versi mvn. Sayangnya itu tidak ditulis untuk penggunaan umum tetapi jika orang tertarik saya bisa membuatnya dan meletakkannya di intisari atau github.

Kembali ke alur kerja ketika beberapa komentar bertanya tentang apa yang kami lakukan:

  1. Kami memiliki sekitar 20 proyek dalam repositori mereka sendiri dengan pekerjaan jenkins mereka sendiri
  2. Ketika kami merilis plugin rilis pakar digunakan. Alur kerjanya tercakup dalam dokumentasi plugin. Plugin rilis pakar semacam menyebalkan (dan saya baik hati) tapi itu berhasil. Suatu hari kami berencana mengganti metode ini dengan sesuatu yang lebih optimal.
  3. Ketika salah satu proyek dirilis jenkins kemudian menjalankan pekerjaan khusus kami akan memanggil pekerjaan pembaruan semua versi (bagaimana jenkins tahu itu rilis adalah bagian yang rumit karena plugin rilis maven jenkins cukup jelek juga).
  4. Pekerjaan pembaruan semua versi tahu tentang semua 20 proyek. Sebenarnya ini adalah agregator pom untuk lebih spesifik dengan semua proyek di bagian modul dalam urutan ketergantungan. Jenkins menjalankan sihir groovy / bash foo kami yang akan menarik semua proyek memperbarui versi ke yang terbaru dan kemudian checkin pom (sekali lagi dilakukan dalam urutan ketergantungan berdasarkan bagian modul).
  5. Untuk setiap proyek jika pom telah berubah (karena perubahan versi dalam beberapa dependensi) itu diperiksa dan kemudian kami segera melakukan ping jenkins untuk menjalankan pekerjaan yang sesuai untuk proyek itu (ini adalah untuk menjaga agar membangun dependensi jika tidak Anda berada di rahmat penjadwal Poll SCM).

Pada titik ini saya berpendapat itu adalah hal yang baik untuk memiliki rilis dan versi otomatis alat terpisah dari build umum Anda.

Sekarang Anda mungkin berpikir maven agak menyebalkan karena masalah yang tercantum di atas tetapi ini sebenarnya akan cukup sulit dengan alat build yang tidak memiliki deklaratif yang mudah untuk menguraikan sintaks yang dapat diperpanjang (alias XML).

Sebenarnya kami menambahkan atribut XML khusus melalui ruang nama untuk membantu memberi petunjuk skrip bash / groovy (mis. Jangan perbarui versi ini).

Adam Gent
sumber
5
Terima kasih telah memasukkan motivasi (penyebaran berkelanjutan) dalam jawaban Anda.
David J. Liszewski
10
Saya pikir poin penting di sini yang membangun dapat direproduksi dengan metode ini, sedangkan, ketika menggunakan rentang versi atau-TERBARU, mereka tidak!
marc.guenther
Saya ingin solusi kedua menggunakan alat eksternal membuat perubahan ke pom proyek sebelum menjalankan build. Kami juga menggunakan pendekatan ini karena versi-range-plugin secara inheren disadap misalnya mengambil tanggal akun dan bukan hanya versi.
Daniel Hajduk
37

Sintaks dependensi terletak di dokumentasi Spesifikasi Persyaratan Versi Dependensi . Ini dia untuk kelengkapan:

versionElemen dependensi menentukan persyaratan versi, digunakan untuk menghitung versi dependensi yang efektif. Persyaratan versi memiliki sintaks berikut:

  • 1.0: Persyaratan "Lunak" pada 1.0 (hanya rekomendasi, jika cocok dengan semua rentang lain untuk ketergantungan)
  • [1.0]: Persyaratan "Keras" pada 1.0
  • (,1.0]: x <= 1.0
  • [1.2,1.3]: 1.2 <= x <= 1.3
  • [1.0,2.0): 1.0 <= x <2.0
  • [1.5,): x> = 1.5
  • (,1.0],[1.2,): x <= 1.0 atau x> = 1.2; beberapa set dipisahkan dengan koma
  • (,1.1),(1.1,): ini tidak termasuk 1.1 (misalnya jika diketahui tidak bekerja dalam kombinasi dengan pustaka ini)

Dalam kasus Anda, Anda bisa melakukan sesuatu seperti <version>[1.2.3,)</version>

mkobit
sumber
15

Apakah Anda mungkin bergantung pada versi pengembangan yang jelas banyak berubah selama pengembangan?

Alih-alih menambah versi rilis pengembangan, Anda bisa menggunakan versi snapshot yang Anda timpa saat diperlukan, yang berarti Anda tidak perlu mengubah tag versi pada setiap perubahan kecil. Sesuatu seperti 1.0-SNAPSHOT ...

Tetapi mungkin Anda mencoba mencapai sesuatu yang lain;)

Martin Klinke
sumber
7

Siapa yang pernah menggunakan TERBARU, pastikan Anda memiliki -U kalau tidak, snapshot terbaru tidak akan ditarik.

mvn -U dependency:copy -Dartifact=com.foo:my-foo:LATEST
// pull the latest snapshot for my-foo from all repositories
trung
sumber
bahkan menggunakan -UI saya dapatkanCouldn't download artifact: Failed to resolve version for com.app:common:jar:LATEST
Robert
7

Pada saat pertanyaan ini diajukan, ada beberapa kekusutan dengan rentang versi di pakar, tetapi ini telah diselesaikan di versi pakar yang lebih baru. Artikel ini menangkap dengan sangat baik bagaimana rentang versi bekerja dan praktik terbaik untuk lebih memahami bagaimana maven memahami versi: https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8855

bclarance
sumber
2
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Karl Richter
6

Kebenarannya bahkan dalam 3.x masih berfungsi, secara mengejutkan proyek tersebut dibangun dan digunakan. Tetapi kata kunci TERBARU / RELEASE menyebabkan masalah dalam m2e dan gerhana di semua tempat, proyek JUGA tergantung pada ketergantungan yang digunakan melalui TERBARU / RELEASE gagal mengenali versi.

Ini juga akan menimbulkan masalah jika Anda mencoba mendefinisikan versi sebagai properti, dan merujuknya di tempat lain.

Jadi kesimpulannya adalah menggunakan versi-maven-plugin jika Anda bisa.

Junchen Liu
sumber
5

Kadang-kadang Anda tidak ingin menggunakan rentang versi, karena tampaknya mereka "lambat" untuk menyelesaikan dependensi Anda, terutama ketika ada pengiriman terus menerus di tempat dan ada banyak versi - terutama selama pengembangan yang berat.

Salah satu solusinya adalah dengan menggunakan versi-maven-plugin . Misalnya, Anda dapat mendeklarasikan properti:

<properties>
    <myname.version>1.1.1</myname.version>
</properties>

dan tambahkan versi-maven-plugin ke file pom Anda:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <properties>
                    <property>
                        <name>myname.version</name>
                        <dependencies>
                            <dependency>
                                <groupId>group-id</groupId>
                                <artifactId>artifact-id</artifactId>
                                <version>latest</version>
                            </dependency>
                        </dependencies>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
</build>

Kemudian, untuk memperbarui ketergantungan, Anda harus menjalankan tujuan:

mvn versions:update-properties validate

Jika ada versi yang lebih baru dari 1.1.1, itu akan memberi tahu Anda:

[INFO] Updated ${myname.version} from 1.1.1 to 1.3.2
Markon
sumber
3

Jika Anda ingin Maven harus menggunakan versi terbaru dari dependensi, maka Anda dapat menggunakan Plugin Version Maven dan cara menggunakan plugin ini, Tim telah memberikan jawaban yang baik, ikuti jawabannya .

Tetapi sebagai pengembang, saya tidak akan merekomendasikan praktik seperti ini. MENGAPA?

jawaban mengapa sudah diberikan oleh Pascal Thivent dalam komentar pertanyaan

Saya benar-benar tidak merekomendasikan praktik ini (atau menggunakan rentang versi) demi membangun reproduktifitas. Bangunan yang mulai gagal tiba-tiba karena alasan yang tidak diketahui jauh lebih menjengkelkan daripada memperbarui nomor versi secara manual.

Saya akan merekomendasikan jenis latihan ini:

<properties>
    <spring.version>3.1.2.RELEASE</spring.version>
</properties>

<dependencies>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

</dependencies>

mudah dirawat dan mudah di-debug. Anda dapat memperbarui POM Anda dalam waktu singkat.

Arayan Singh
sumber
jika Anda menggunakan versi-maven-plugin, versi ini masih dapat direproduksi. Memperbarui versi pakar dapat dilakukan dalam komit terpisah (seperti yang dapat Anda lihat dari jawaban saya, Anda harus menentukan tujuan terpisah, itu tidak terjadi secara ajaib dalam pembuatan).
Markon
1

Solusi MY di pakar 3.5.4, gunakan nexus, dalam gerhana:

<dependency>
    <groupId>yilin.sheng</groupId>
    <artifactId>webspherecore</artifactId>
    <version>LATEST</version> 
</dependency>

lalu di eclipse:, atl + F5dan pilihforce update of snapshots/release

ini bekerja untuk saya.

yilin
sumber
Tidak akan bekerja di baris perintah meskipun dengan alasan yang disebutkan di atas dalam berbagai posting. Banyak dari kita harus menyesuaikan dengan build otomatis dan POM kita harus bekerja ketika dijalankan di baris perintah, bukan hanya di Eclipse.
bigbadmouse
Saya menggunakan pakar 3.5.4 dan mendapatkan ini ketika menggunakan 'terbaru': apakah TERBARU atau RELEASE (keduanya tidak digunakan lagi) @ line 154, kolom 13
Leonardo Leonardo