Maven yerel eseri bulamıyor


108

Bazen maven, yerel olarak oluşturulan ve paketlenen belirli bir bağımlılığın, bağımlılık olarak sahip başka bir proje oluştururken yerel depoda bulunamadığından şikayet eder. Aşağıdaki gibi bir hata alıyoruz:

X projesinde hedef yürütülemedi: X projesi için bağımlılıklar çözülemedi: [arşiv deposunda] Y'nin bulunamaması yerel depoda önbelleğe alındı, dahili güncelleme aralığı sona erene veya güncellemeler zorlanana kadar çözümleme yeniden denenmeyecek - >

X'in inşa edilmekte olan proje olduğu ve Y'nin sözde eksik yapı olduğu yerde. Yerel depoya bakarsanız, yapı oradadır. Bu yapı hiçbir zaman arşiv depomuza yüklenmez, bu nedenle sorun tamamen yerel depoya bağlıdır.

Settings.xml'de ve tabii ki "mvn -U" da çeşitli profilleri denedik. Ne bir faydası var ne de yapmamalı çünkü bu yapı yerel depodan daha ileri gitmiyor.

İşe yarayan iki şey, maven'ın akıllı hale gelmesini çok uzun süre beklemek veya yerel depoyu tamamen silmektir. Muhtemelen bekleme seçeneği, yukarıda bahsedilen güncelleme aralığı ile ilgilidir.

Bu sorunu maven 3.0.2 ve 3.0.3 ile yaşadık. Archiva 1.0.3 kullanıyoruz (ancak yine de bu bir faktör olmamalı). Herhangi bir yardım çok takdir edilecektir.


1
Maven "beklerken" mi yoksa hemen önce herhangi bir şey kaydediyor mu? Yani ulaşılamayan bir depoya bağlanmaya mı çalışıyor? Ayrıca, sorunlu yapılar "-SNAPSHOT" mu?
noahlz

Maven, yukarıda bahsettiğim hatadan başka bir şey kaydetmiyor. Ve evet bu anlık bir bağımlılıktır.
user1686620


1
İkinci projeyi oluşturmaya çalışmadan önce derleme paketini kurdunuz mu?
khmarbaise

3
Hata mesajının dilbilgisi açısından doğru bir cümle değil, sürekli devam etmesi hoşuma gidiyor. Bu şekilde, Y'yi bulup bulamayacağını veya Y'nin yerel olarak önbelleğe alınmış olup olmadığını veya her ikisini birden bulup bulamayacağından emin olamayız. Neyse, benzer bir sorunum var. Benim bağımlılıkları nedeniyle -U seçeneği ile çözmek için başardı vardır Şirket içi repo. İhtiyacınız olan yapılar neden şirketinizin dahili deposuna dağıtılmıyor?
jyoungdev

Yanıtlar:


81

Yerel Maven deposu, yapıtların orijinal olarak nereden geldiklerini, yapı dizinindeki "_maven.repositories" adlı bir dosyayı kullanarak izler. Çıkardıktan sonra yapı çalıştı. Bu cevap benim için sorunu çözdü.


26
Benim için "_remote.repositories" adlı bir dosyaydı. Kaldırdım ve işe yaradı! Numaralar için teşekkürler!
perbellinio

2
Thx _remote.repositories adlı dosya da mevcuttu. bağlantı
noktanızın

1
Sağlanan çözüm işe yarıyor. Ancak, bu sorunun neden ortaya çıktığı ile ilgileniyorum. Herhangi biri bana hızlı bir açıklama sağlayabilir mi? Farklı bir şey yapmak zorunda mıyım?
Janothan

Bu kaynak denetimini bir kez atlamak istiyorsanız (meta dosyaları silmeden), aether.enhancedLocalRepository.trackingFilename=some_dummy_file_namebağımlılık çözümleme sürecine geçmeyi deneyin ; en kolay yol, çağrı komutuna bir -D sistem özelliği eklemektir.
Janaka Bandara

@Janothan IMO Cevaptaki bağlantı oldukça iyi bir açıklama sağlıyor :)
Janaka Bandara

40

Buradaki seçenekler benim için işe yaramadığından, nasıl çözdüğümü paylaşıyorum:

Projemde, biri (A) başka bir çocuğa (B) bağımlı olan çok sayıda alt modül içeren bir ana proje (kendi pom.xml ile) var. mvn packageA'yı denediğimde işe yaramadı çünkü B çözülemedi.

mvn install Üst dizinde yürütmek işi yaptı. Ondan sonra mvn package, A'nın içini yapabilirdim ve ancak o zaman B'yi bulabilirdi.


3
TEŞEKKÜR EDERİM! bu beni deli ediyordu. mvn clean package jboss-as: deploy, tek bir satırda çalıştırdığımda çalışıyordu, ancak bunları ayrı yaptığımda çalışmıyordu.
PMorganCA

19

Çevrimdışı modda bile, maven, bağımlılık için bir _remote.repositories işaretçisi varsa uzak depoları kontrol edecektir. Çevrimdışı modda çalıştırmanız gerekiyorsa, bu dosyaları silmeniz gerekebilir.

Aşağıdaki basit kabuk komutu bu işaret dosyalarını siler. Makine için yalnızca çevrimdışı modu kullanıyorsanız, bunu yapmak güvenlidir. Dosyaları web'den aşağı çekmesi gereken bir makinede bunu YAPMAM.

Bu stratejiyi web ile bağlantısı kesilmiş bir yapı sunucusunda kullandım. Depoyu ona aktarmalı, işaret dosyalarını silmeli ve ardından çevrimdışı modda çalıştırmalıyız.

Linux / Unix'te uzak depo işaretleme dosyalarını şu şekilde silebilirsiniz:

cd ~/.m2
find . -name "_remote.repositories" -type f -delete

1
Bu çözüm, merkezi bir depoda bulunmayan başka bir bilgisayardan kopyaladığım bir bağımlılık için benim için çalıştı. Komut birkaç karakteri kaçırıyor. İşte tam komut: bul. -name "_remote.repositories" -type -f -delete
Hans Deragon

2
Veya silmek yerine , işleme _remote.repositoriesgeçerek Maven'i dosyaya bakmaması için "yanlış yönlendirebilmelisiniz" -Daether.enhancedLocalRepository.trackingFilename=some_dummy_file_name. (Gerçek bir Maven yapısını denemedim, ancak Maven'i programlı olarak çağırırken çalışıyor; bu nedenle eski de çalışmalı)
Janaka Bandara

1
Bu bulmayı ve Maven tarafından bulunmayan belirli bağımlılıkları (kavanozları) silerek yaptım, çünkü bunlar listelenmiş ve yönetilebilir (<10). Bu, şu anda mevcut olmayan uzak bir Nexus'a işaret eden bir yanlış yapılandırmadan kaynaklanıyordu (anladığım kadarıyla ..). Bu nedenle, tüm depoyu silmek için taramanıza gerek yok. Her neyse, bu çözüm günü kurtardı. Benim için çalışıyor.
Diego1974

9

Bu benim başıma geldiğinde, bunun nedeni settings.xml dosyamı bir şablondan körü körüne kopyaladığım ve hala boş <localRepository/>öğeye sahip olduğumdu . Bu, bağımlılıkları çözerken hiçbir yerel depo kullanılmadığı anlamına gelir (yüklü yapılarınız yine de varsayılan konuma yerleştirilir). Onunla değiştirdiğimde <localRepository>${user.home}\.m2\repository</localRepository>çalışmaya başladım.

* Nix için <localRepository>${user.home}/.m2/repository</localRepository>, sanırım bu olurdu .


6
$ {user.home} \. m2 \ repository varsayılandır, bu nedenle boş etiketi kaldırmak aynı şekilde çalışmalıdır.
Luis Muñoz

9

Maven bir şey bulamadığını hatırlıyor. Anahtar, "dahili güncelleme aralığı dolana veya güncellemeler zorlanana kadar çözüm yeniden denenmeyecektir ->"

Hızlı çözüm, sorunu çözdüğünüzü varsayarak, sorun yapısına ilişkin yerel "depo" alt dizininizi silmektir. :)

mvn -U Uzak depodan güncellemeyi zorlayacak - yine, uzaktaki söz konusu yapı ile doldurduğunuzu varsayarak.


2

Hepsini yakalayın. Burada bahsedilen çözümler işe yaramadığında (benim durumumda oldu), '.m2' klasöründen / dizininden tüm içeriği silin ve yapın mvn clean install.


2

Eğer varsa <repositories/>sizin pom.xml tanımlanan görünüşte yerel depo göz ardı edilir.


1

Ben bile bu sorunla karşılaştım ve 2 yoldan çözdüm:

1) IDE'nizde projeyi seçin ve tüm projeleri temizleyin, ardından projeye sağ tıklayarak tüm maven bağımlılıklarını kurun -> maven'e gidin ve proje bağımlılıklarını güncelle, aynısını yüklemek için tüm projeleri bir defada seçin. Bu yapıldıktan sonra belirli projeyi çalıştırın

2) Başka Yapabileceğiniz şey, hata aldığınız bağımlılıklar için pom.xml'de kontrol etmek ve önce bu bağımlı projeyi "mvn clean install" ve sorunla karşılaştığınız mevcut projenin kurulum maven bağımlılıklarını kontrol etmektir. Bununla yerel projenin bağımlılıkları inşa edilecek ve kavanozlar oluşturulacaktır.


0

Yeni projem oracle jdbc jar'e bağlı olduğunda (yerel depomda kurduğum ve diğer projeler için iyi çalıştığım) benzer problemle karşılaşıyorum. .Lastupdate dosyasını veya tüm dizini silerek -U seçeneğini denedim ve tekrar indirdim, ancak işe yaramadı. sonunda dizini sildim ve tekrar yerel olarak yükledim, çalışıyor.


0

Maven'de bulduğum hatalardan biri, settings.xml dosyamı yanlış dizine koymamdı. Kullanıcı ana dizininizin altında .m2 klasöründe olması gerekir. Bunun doğru yerde olduğundan emin olun (kullanıyorsanız settings-security.xml ile birlikte).


0

Ben DependencyResolutionExceptionbir kabuk komut dosyası üzerinden yerel eserler yükledim zaman Ubuntu Linux. Çözüm, yerel yapıları silmek ve onları tekrar "manuel olarak" kurmaktı mvn install:install-file- terminal aracılığıyla arama .


0

Bu, httpbunun yerine bende olduğu için oldu https:

<repository>
    <id>jcenter</id>
    <name>jcenter-bintray</name>
    <url>https://jcenter.bintray.com</url>
</repository>

0

Y yapınızın ambalajının "kavanoz" olarak ayarlanıp ayarlanmadığını kontrol edin. Bunu hata veya kopyala yapıştır ile "savaş" olarak tanımladıysanız, "yerel depoda önbelleğe alındı, dahili güncelleme aralığı dolana veya güncellemeler zorlanana kadar çözümleme yeniden denenmeyecektir". "Artefact Y savaştır, kavanoz türü bekleniyor" gibi bir şey beklerdim.


-1

Aynı hatayı farklı bir nedenden dolayı aldım: "İyi uygulama" bağımlılıklarımızı içeren bir başlangıç ​​POM'u oluşturdum ve test etmek için yerel olarak kurup kurdum. Depoda "görebiliyordum", ancak onu kullanan bir proje yukarıdaki hatayı aldı. Yaptığım şey, başlangıç ​​POM'unu pom olarak ayarlamaktı, bu yüzden JAR yoktu. Maven, Nexus'ta olmadığı konusunda oldukça haklıydı - ama olmasını beklemiyordum, bu yüzden hata, ummm, yardımcı olmadı. Başlangıç ​​POM'unu normal paketleme ve yeniden yükleme olarak değiştirmek sorunu çözdü.


Bu cevap, soruya doğrudan bir cevap olmadığı için muhtemelen bir yorum olarak daha iyi olurdu.
00prometheus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.