Bagaimana cara memaksa pembaruan pakar?

731

Saya mengimpor proyek saya yang sudah berfungsi di komputer lain dan mulai mengunduh dependensi.

Rupanya koneksi internet saya macet dan sekarang saya mendapatkan yang berikut:

    >Build errors for comics; org.apache.maven.lifecycle.LifecycleExecutionException:
    Failed to execute goal on project comicsTest: Could not resolve dependencies for project comicsTest:comicsTest:war:0.0.1-SNAPSHOT:
    The following artifacts could not be resolved:
    org.springframework:spring-context:jar:3.0.5.RELEASE,
    org.hibernate:hibernate-entitymanager:jar:3.6.0.Final,
    org.hibernate:hibernate-core:jar:3.6.0.Final,
    org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final,
    org.aspectj:aspectjweaver:jar:1.6.8,
    commons-lang:commons-lang:jar:2.5,

    >mysql:mysql-connector-java:jar:5.1.13: Failure to transfer org.springframework:spring-context:jar:3.0.5.RELEASE from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced.

    >Original error: Could not transfer artifact org.springframework:spring-context:jar:3.0.5.RELEASE from central (http://repo1.maven.org/maven2): No response received after 60000

Bagaimana cara saya memaksa pakar memperbarui?

M4ks
sumber
Catatan: Saya mengalami masalah ini dengan Atlassian Maven (dari plugin SDK) dan meningkatkan ke versi yang lebih baru memecahkan masalah.
Wirone

Jawaban:

1597
mvn clean install -U

-Uberarti memaksa pembaruan ketergantungan snapshot . Ketergantungan rilis tidak dapat diperbarui dengan cara ini.

lwpro2
sumber
32
Saya setuju dengan lwpro2, ini menyelesaikan masalah saya juga. Melakukan mvn bersih saja tidak cukup. Jawaban Navi tidak cukup untuk menyelesaikan masalah.
R. van Twisk
1
Saya percaya ini lebih rumit jika Anda menggunakan artifactory dan menggunakan repositori id "central", karena metadata tampaknya tidak dibersihkan.
ggb667
2
Tampaknya ini tidak benar-benar memperbarui stoples ketergantungan snapshot, hanya metadata.
Roddy of the Frozen Peas
jika itu disebabkan oleh file .lastupdated, yang dihasilkan dari unduhan dependensi terakhir yang gagal, metode ini tidak akan berfungsi, kita memerlukan sesuatu seperti jawaban Rober Reiz
Junchen Liu
1
Saya mencari bantuan untuk versi sebelumnya dan hingga maven 2.0.4, deskripsi untuk flag -U adalah: "-U, - perbarui-snapshot Perbarui semua snapshot terlepas dari kebijakan repositori" dimulai dengan 2.0.5, menjadi: "-U, - perbarui-snapshots Memaksa cek untuk rilis yang diperbarui dan snapshot pada repositori jarak jauh" Dan sudah seperti itu sejak saat itu. Kedua versi dirilis pada tahun 2007. Saya ingin tahu apakah jawabannya harus diedit untuk memperhitungkan rilis juga?
cleberz
93

Jika repositori lokal Anda entah bagaimana dibersihkan untuk stoples rilis yang bukan snapshot ( -Udan --update-snapshotshanya perbarui snapshot), Anda dapat membersihkan repo lokal menggunakan yang berikut ini:

 mvn dependency:purge-local-repository

Anda mungkin ingin membersihkan dan menginstal lagi:

 mvn dependency:purge-local-repository clean install

Banyak info lebih lanjut tersedia di https://maven.apache.org/plugins/maven-dependency-plugin/examples/purging-local-repository.html

FuzzyJulz
sumber
8
Segera setelah saya melakukannya mvn dependency:purge-local-repository, itu hanya mengunduh ulang semua dependensi lagi, yang persis apa yang saya inginkan
smac89
92

-U tampaknya memaksa pembaruan semua dependensi.

Jika Anda ingin memperbarui ketergantungan tunggal tanpa membersihkan atau -UAnda bisa menghapusnya dari repo lokal Anda dan kemudian membangun.

Contoh di bawah ini jika untuk memperbarui slf4j-api 1.7.1-SNAPSHOT:

rm -rf ~/.m2/repository/org/slf4j/slf4j-api/1.7.1-SNAPSHOT
mvn compile
Ayush Gupta
sumber
Ini berfungsi baik jika Anda menggunakan alat lain selain maven yang mereferensikan repositori maven lokal Anda.
Mansoor Siddiqui
57

Semua jawaban di sini tidak berhasil untuk saya. Saya menggunakan metode palu:

find ~/.m2/ -name "*.lastUpdated" | xargs rm

Itu memperbaiki masalah :-)

Robert Reiz
sumber
1
@ DJ2 Ini menghapus semua file di .m2-direktori bernama*.lastUpdated
sjngm
find ~/.m2/ -name "*.lastUpdated" -deleteakan dilakukan tanpa bahaya xargsatau rmmelebihi batas tertentu (jika banyak file ditemukan).
A Sz
45

Anda dapat melakukannya dengan efektif Eclipse IDE. Tentu saja jika Anda menggunakannya.

Project_Name->Maven->Update Project Configuration->Force Update of Snapshots/Releases
Amit Shakya
sumber
1
Saya melakukan versi baris perintah dalam jawaban oleh @ lwpro2, yang membuat saya membangun di baris perintah , tapi kemudian saya masih tidak bisa membangun di dalam Eclipse. Melakukan ini membuatnya dibangun melalui Eclipse.
Brick
Hanya berfungsi untuk saya jika saya menutup dan membuka kembali Eclipse setelah menjalankan pembaruan.
ceklock
33

Hanya dalam kasus seseorang ingin hanya memperbarui dependensi snapshot proyek dan tidak ingin menginstal artefak:

mvn dependency:resolve -U

Jangan lupa untuk mengembalikan dependensi di IDE Anda. Di IDEA Anda perlu mengklik kanan pada file pom dan memilih Maven -> Reimport

GlaIZier
sumber
13

Jika Anda tidak yakin apa yang ada di dalam repositori lokal Anda, saya sarankan untuk memecat build dengan opsi:

-Dmaven.repo.local=localrepo

Dengan begitu Anda akan memastikan untuk membangun di lingkungan kamar bersih.

merejy
sumber
5
perintah ini berarti menggunakan folder localrepo untuk menjadi repositori lokal. itu bagus untuk satu ruang kerja proyek tetapi buruk jika Anda memiliki lebih dari satu proyek, dan beberapa bergantung pada yang lain. maka Anda lebih baik memberikan path lengkap seperti -Dmaven.repo.local = / data / my / localrepoDir
tgkprog
9

Dalam kasus saya yang pertama saya lakukan adalah:

mvn clean install -U

Masih menunjukkan kesalahan yang sama kemudian saya menutup proyek dan kembali membukanya lagi. Akhirnya berhasil.

rajeev
sumber
Saya pikir Anda bisa melakukan dependensi
impor
4

Jika Anda menggunakan eclipse IDE, maka:

  • Pilih Proyek.
  • Tekan alt + F5, jendela untuk Perbarui Maven Project akan muncul.

  • Periksa - Paksa Perbarui Snapshots / rilis dan klik OK

Jika Menggunakan Intellij IDE

  • buka pengaturan / Maven
  • centang Selalu perbarui foto
patidarsnju
sumber
3

Saya menggunakan IDE IntelliJ dan saya memiliki masalah yang sama dan untuk menyelesaikannya saya mengklik "Hasilkan Sumber dan Perbarui Folder untuk Semua Proyek" di tab Maven.

masukkan deskripsi gambar di sini

Willyan
sumber
2

Saya mendapatkan kesalahan dalam konteks lain. Jadi solusi saya mungkin berguna bagi orang lain yang mencari pertanyaan:

Masalahnya: Saya telah menyalin repositori lokal ke komputer lain, yang tidak memiliki koneksi ke repositori khusus. Jadi, pakar mencoba memeriksa artefak terhadap repositori yang tidak valid.

Solusi saya: Hapus file _maven.repositori.

Matthias M
sumber
2

Ini adalah salah satu hal yang paling menyebalkan tentang Maven. Bagi saya hal berikut terjadi: Jika saya menambahkan dependensi yang meminta lebih banyak dependensi dan semakin banyak tetapi memiliki koneksi yang lambat, sepertinya akan berhenti ketika mengunduh dan menghitung waktu. Sementara waktu keluar semua dependensi yang belum diambil ditandai dengan tempat penampung di .m2 cache dan Maven tidak akan (tidak pernah) mengambilnya kecuali saya menghapus entri tempat penampung dari cache (seperti yang dinyatakan lain) dengan menghapusnya.

Jadi sejauh yang saya lihat, Maven atau lebih tepatnya plugin Eclipse Maven memiliki bug mengenai hal ini. Seseorang harus melaporkan ini.

Martin Kersten
sumber
2

Anda perlu memeriksa file settings.xml Anda di bawah <maven_home>/confdirektori.

Ashish Nariyal
sumber
1

Saya mendapat kesalahan yang sama dengan ketergantungan android-maps-utils. Menggunakan paket tipe aar di bagian dependensi menyelesaikan masalah saya. Secara default tipe ini jar sehingga Mungkin diperiksa jenis dependensi dalam repositori yang diunduh.

zhen_khokh
sumber
1

Untuk memperbaiki masalah ini dari Eclipse:

1) Tambahkan ketergantungan di bawah ini di Maven pom.xml dan simpan file pom.xml.

<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.3.1</version>
</dependency>

2) Pergi ke proyek >> Maven >> Perbarui Proyek

pilih proyek dan klik OK.

3) Langkah opsional, jika tidak diselesaikan sampai langkah 2 kemudian lakukan langkah di bawah ini setelah melakukan langkah-1

Buka proyek >> Maven >> Perbarui Proyek >> centang di kotak centang 'Paksa Perbarui Snapshots / Rilis'

pilih proyek dan klik OK.

Tarun11
sumber
1

Versi sebelumnya dari maven tidak memaksa pemeriksaan untuk rilis yang hilang ketika digunakan -U dengan mvn clean install, hanya snapshots, meskipun versi yang lebih baru mendukung ini.

Untuk seseorang yang masih berjuang dengan versi sebelumnya, mengikuti dapat bermanfaat-

Di Windows:

cd %userprofile%\.m2\repository
for /r %i in (*.lastUpdated) do del %i

Di Linux:

find ~/.m2  -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;

Setiap kali pakar tidak dapat mengunduh dependensi karena alasan apa pun (konektivitas / tidak ada dll), itu akan menambahkan ".error = Tidak dapat mentransfer artefak" di file dependency-name.lastUpdate di masing-masing folder di bawah direktori $ home / .m2. Menghapus file-file ini akan memaksa pakar untuk mencoba mengambil dependensi lagi.

ankidaemon
sumber
0

Sangat penting untuk menambahkan bahwa perbedaan utama dari menjalankan mvn dengan -U dan tanpa -U adalah bahwa -Uakan menimpa guci SNAPSHOT lokal Anda dengan guci SNAPSHOT jarak jauh.

Guci SNAPSHOT lokal dibuat dari lokal mvn installdalam kasus di mana Anda memiliki modul lain dari proyek Anda yang menghasilkan guci.

Johnny
sumber
0

-U digunakan untuk memaksa pembaruan maven Repo. Menggunakan

mvn -U clean install
Sanjeev Guglani
sumber
Ini adalah jawaban yang sama persis dengan jawaban yang diterima. Diberikan 6 tahun sebelumnya ...
Kerwin Sneijders
@KerwinSneijders Saya telah menambahkan jawaban 2 tahun yang lalu pada waktu itu, jawaban yang diterima tidak memberikan informasi tentang apa -U lakukan di sini
Sanjeev Guglani
Sejauh yang saya tahu jawaban yang diterima termasuk informasi dari hari itu diposting. (14 Mar '12). Dan bahkan jika tidak, informasi ini lebih baik diposting dalam komentar di bawah jawaban yang diterima karena itu bukan jawaban melainkan info tambahan
Kerwin Sneijders
0

Saya mencoba semua jawaban di sini tetapi sepertinya tidak ada yang berhasil. Nyalakan kembali komputer saya, lalu jalankan mvn clean install -U. Itu memecahkan masalah saya.

Gelo
sumber
0

Apa yang dilakukan pakar adalah, ia mengunduh semua dependensi proyek Anda ke repo lokal Anda (folder .m2). Karena internet menyebabkan masalah dengan repo lokal Anda, proyek Anda menghadapi masalah. Saya tidak yakin apakah ini pasti akan membantu Anda atau tidak, tetapi Anda dapat mencoba menghapus semua file di dalam folder repositori di dalam folder .m2. Karena tidak akan ada dalam repo lokal, maven akan dipaksa untuk mengunduh dependensi lagi, sehingga memaksa pembaruan. Secara umum, folder .m2 terletak di c: pengguna: [nama pengguna]:. M2

Ketan R
sumber
-1

Saya punya masalah ini karena alasan yang berbeda. Saya pergi ke repositori maven https://mvnrepository.com mencari versi terbaru dari pegas inti, yang pada saat itu adalah 5.0.0.M3 / Repositori menunjukkan entri ini untuk pom.xml saya:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.0.M3</version>
</dependency>

Bodoh naif saya, saya berasumsi bahwa komentar itu mengatakan kepada saya bahwa toples terletak di repositori default.

Namun, setelah banyak head-banging, saya melihat catatan tepat di bawah xml yang mengatakan "Catatan: artefak ini terletak di repositori Publik Alfresco ( https://artifacts.alfresco.com/nexus/content/repositories/public/ ) "

Jadi komentar dalam XML benar-benar menyesatkan. Guci itu terletak di arsip lain, itulah sebabnya Maven tidak bisa menemukannya!

pengguna1208639
sumber
-3

Kami dapat memaksa untuk mendapatkan pembaruan terbaru dari repositori rilis dan snapshot dengan perintah di bawah ini:

mvn --update-snapshots clean install
sopheak Seng
sumber
12
Ini adalah jawaban yang sama persis dengan jawaban yang diterima. -U adalah bentuk pendek dari --update-snapshots.
Roddy of the Frozen Peas
-3

Saya memiliki kesalahan yang sama dan berjalan mvn install -Udan kemudian berjalan mvn installbekerja untuk saya.

rich_markle
sumber
10
Tolong jangan posting "hal yang disebutkan dalam semua jawaban lain juga berfungsi untuk saya" .
kryger
-4

Saya mengalami ini baru-baru ini dan menjalankan yang berikut memperbaiki semua masalah

mvn -fae install
Hugh Brien
sumber
5
-fae,--fail-at-end Only fail the build afterwards; allow all non-impacted builds to continueTampaknya ini cara yang aneh untuk memperbaiki dependensi eksternal yang tidak diperbarui ..
Donatello
-5

mvn clean install -Utidak bekerja Namun mvn -U cleandiikuti oleh mvn clean installtidak.

mroman
sumber