Maven neden her seferinde maven-metadata.xml dosyasını indiriyor?


116

Aşağıda, maven ile bir web uygulaması oluşturmaya çalışırken internet bağlantım kesik olduğunda aldığım hatayı görüyorum.

Sorum şu ki, aynı uygulama daha önce inşa edildiğinde neden maven her zaman her zaman indirmek zorunda kalıyor?

Yapılandırmamda maven'i her seferinde indirmeye zorlayan ne olabilir?

Çevrimdışı oluşturmaya çalıştığımda aldığım bir hata aşağıdadır:

[INFO] ------------------------------------------------------------------------
[INFO] Building mywebapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://raw.github.com/pagecrumb/mungo/mvn-repo/com/pagecrumb/mungo/0.0.1-SNAPSHOT/maven-metadata.xml

[WARNING] Could not transfer metadata com.mywebapp:mungo:0.0.1-SNAPSHOT/maven-metadata.xml 
from/to mungo-mvn-repo (https://raw.github.com/pagecrumb/mungo/mvn-repo/): raw.github.com
[INFO] 
[INFO] --- maven-war-plugin:2.1.1:war (default-cli) @ mywebapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp] in [D:\workspace\web\target\mywebapp-1.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\workspace\web\src\main\webapp]
[INFO] Webapp assembled in [1237 msecs]
[INFO] Building war: D:\workspace\web\target\mywebapp-1.0-SNAPSHOT.war
[WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored 
(webxml attribute is missing from war task, 
or ignoreWebxml attribute is specified as 'true')
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building com.mywebapp [com.mywebapp] 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.1/maven-release-plugin-2.1.pom

[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-release-plugin:2.1: Plugin org.apache.maven.plugins:maven-release-plugin:2.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-release-plugin:jar:2.1
Downloading: http://download.java.net/maven/2/org/apache/maven/plugins/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/codehaus/mojo/maven-metadata.xml

397/397 B   

Downloaded: http://download.java.net/maven/2/org/codehaus/mojo/maven-metadata.xml (397 B at 0.0 KB/sec)
[WARNING] Failure to transfer org.apache.maven.plugins:maven-war-plugin/maven-metadata.xml from http://download.java.net/maven/2 was cached in the local repository, resolution will not be reattempted until the update interval of maven2-repository.dev.java.net has elapsed or updates are forced. Original error: Could not transfer metadata org.apache.maven.plugins:maven-war-plugin/maven-metadata.xml from/to maven2-repository.dev.java.net (http://download.java.net/maven/2): download.java.net
[INFO] 
[INFO] --- maven-war-plugin:2.3:war (default-cli) @ mywebapp-build ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp-build] in [D:\workspace\target\mywebapp-build-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Webapp assembled in [15 msecs]
[INFO] Building war: D:\workspace\target\mywebapp-build-0.0.1-SNAPSHOT.war
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] mywebapp ..................................... SUCCESS [27.999s]
[INFO] com.mywebapp [com.mywebapp] ..................... FAILURE [1:00.406s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:41.409s
[INFO] Finished at: Tue May 07 22:13:38 SGT 2013
[INFO] Final Memory: 11M/28M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.3:war 
(default-cli) on project mywebapp-build: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)

2
Maven'in yeni oluşturulan SNAPSHOT'lar vb. Hakkında bilgilendirilmesi için SNAPSHOT'lar olması durumunda meta verilere erişim
khmarbaise

7
Neden bilmiyorum ama -o seçeneğini kullanarakmvn clean install -o
karınca

Aslında, derlemenin başarısız olduğu hata "WAR montaj hatası: webxml özniteliği gereklidir (veya güncelleme modunda çalıştırılıyorsa önceden var olan WEB-INF / web.xml)" dir. Yani bunu düzeltmelisiniz. İnternet bağlantınızla ilgili olduğunu hayal edemiyorum. Bağımlılık çözümleme uyarıları sadece şu: uyarılar. Derleme başarısızlığınızın nihai nedeni onlar değildir.
Frans

Belki de iki sorunuz olduğu için sorunuzu netleştirebilirsiniz: 1) Yapım neden başarısız oluyor? 2) Maven neden meta verileri indirmeye çalışıyor? user944849'un cevabı 2) 'yi cevaplamak için uzun bir yol kat ediyor. Sorunuzun cevabı buysa, kabul etmelisiniz.
Frans

Anlık görüntü meta veri güncellemesinden kaçınılabilir -nsu, --no-snapshot-updatesseçenek ilemvn
Janaka Bandara

Yanıtlar:


127

Öğe için settings.xml(veya muhtemelen projenizin ana veya kurumsal ana POM'una) bakın <repositories>. Aşağıdaki gibi bir şeye benzeyecek.

<repositories>
    <repository>
        <id>central</id>
        <url>http://gotoNexus</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </releases>
    </repository>
</repositories>

Öğeye dikkat edin <updatePolicy>. Örnek, Maven'in yeni bir kopya olup olmadığını kontrol ederek, Maven'in bir derleme sırasında anlık görüntü yapısını alması gerektiğinde uzak depoyla (benim durumumda Nexus, kendi uzak deponuzu kullanmıyorsanız Maven Central) iletişim kurmasını söyler. Bunun için meta veriler gereklidir. Daha yeni bir kopya varsa, Maven bunu yerel deponuza indirir.

Örnekte, sürümler için politika, dailygünün ilk kurulumunda kontrol edilecek şekildedir. neverayrıca Maven ayarları belgelerinde açıklandığı gibi geçerli bir seçenektir .

Eklentiler ayrı ayrı çözülür. İstenirse farklı güncelleme politikalarıyla bunlar için de yapılandırılmış depolarınız olabilir.

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://gotoNexus</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </snapshots>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
    </pluginRepository>
</pluginRepositories>

Başka biri -oseçenekten bahsetti . Bunu kullanırsanız, Maven "çevrimdışı" modda çalışır. Yalnızca yerel bir deposu olduğunu bilir ve hangi güncelleme politikalarını kullanırsanız kullanın eserleri yenilemek için uzak depoya başvurmaz.


2
Soru şudur: neden her zaman "asla" değil (ki öyle olması gerektiğini düşünüyorum)? Neden her gün veya her zaman güncellemeye ihtiyacınız var?
Leon

@Leon Geliştirme döngüsünün ortasında, projenizde her zaman en son yerleşik sürümü seçmek isteyebileceğiniz '-SNAPSHOT' bağımlılıkları olabilir - en azından muhtemelen bir CI sisteminde, bir geliştiricinin farklı bir tercihi olabilir - ticaret oluşturma kararlılığı vs en son değişiklikleri almak. Maven belgelerinin (karakteristik olarak, maalesef) netleştiremediği şey, hiçbir şey ayarlanmadıysa bunlar için varsayılan değerlerdir.
Ed Randall

1
En iyi uygulama, bir yapının yayınlandıktan sonra asla değişmemesidir, bu nedenle <updatePolicy> asla </updatePolicy> onlar için uygun olmalıdır.
Ed Randall

Peki ya POM bağımlılıklarınızı yeni bir sürüme güncellerseniz? Asla güncellenmeyecek mi?
Philip Rego

1
@PhilipRego - updatePolicy yapı başına uygulanır. Bir sürüm numarasını veya grup / yapı kimliğini değiştirirseniz, bu farklı bir yapaydır. UpdatePolicy 'hiçbir zaman' ise, yapı yenileme zorlanmadıkça -Uveya yapı yerel depodan kaldırılmadıkça ve dolayısıyla yeniden indirilmesi gerekmedikçe bir kez indirilecektir .
user944849

31

Bunu -o,--offline "Work offline"önlemek için muhtemelen bayrağı kullanmaktır .

Bunun gibi:

maven compile -o


Bunun doğru cevap olması gerektiğine inanıyorum, çünkü internet bağlantınız dalgalı olduğunda bu komutu basitçe çağırabilirsiniz. Ve bu ... istendi neydi
Yani S

13

Sanırım eklenti sürümünü belirtmediğiniz için sonuncuyu almak için ilişkili meta verilerin indirilmesini tetikliyor.

Aksi takdirde -o kullanarak yerel repo kullanımını zorlamaya mı çalıştınız?


Peki eklenti sürümünü nasıl belirlersiniz? Eminim POM'da sürüm setim vardır ... daha spesifik olabilir misiniz?
kuarklar

eğer versionelementin içinde bir elementiniz varsa , plugino zaman gerçekten onu yapılandırmışsınızdır, eğer öyleyse fikirim kalmadı ... İyi şanslar
Gab

benim durumumda sürüm bir aralıktı [12.1 12.2) ve meta veri önbelleği 24 saate ayarlandı, böylece her gün ilk
derlemede

Varsayılan eklentiler ne olacak? gibi maven-surefire-common, hangisini belirtmedim?
yegeniy

sürümleri belirli bir maven sürümü için düzeltildi, ancak pluginManagementbölümü kullanarak farklı bir sürümü zorlayabilirsiniz
Gab

0

Henüz çalışmadım, Maven bu aramayı yaptığında, ancak kararlı ve yeniden üretilebilir yapılar elde etmek için, doğrudan Maven Kaynaklarına erişmemenizi, Nexus gibi bir Maven Depo Yöneticisi kullanmanızı şiddetle tavsiye ederim.

İşte ayarlar dosyanızı nasıl ayarlayacağınız öğretici:

http://books.sonatype.com/nexus-book/reference/maven-sect-single-group.html

http://maven.apache.org/repository-management.html


@acdcjunior dediğim gibi, henüz bunu çalışmadım. Ancak yerel bir Maven Depo Yöneticisi kullanmak bu sorunların çoğunu da çözecektir (Maven meta verileri kontrol ederse yalnızca Maven Depo Yöneticinize erişecektir)
Puce

1
IMHO bir repo yöneticisi, gereksiz indirmeyi önlemek ve özellikle bu kuruluşa özgü eserleri (ana pomlar ve dahili modüller gibi) dağıtmak için yalnızca bir kuruluş içinde yararlıdır. Aksi takdirde, zaten yerel olana sahip olduğunuz için neden ek bir ayna ekleyesiniz?
Gab

@Puce Bunun sorunu nasıl çözeceğini anlamıyorum. Eğer maven'in ağ üzerindeki meta verileri kontrol etmesini istemiyorsanız, internetten mi yoksa intranet repo yöneticisinden mi kontrol ettiği önemli değildir.
eis

@eis, LAN'ınızda yalnızca maven depo yöneticisine eriştiğiniz için, "internet bağlantısı düzensizse" veya depo sunucusundan biri şu anda mevcut değilse yardımcı olmalıdır.
Puce

@Gap repo yöneticileri, bahsettiğiniz nedenlerden dolayı bir organizasyonda özellikle yararlı olsa da, bir repo yöneticisi de kararlı ve tekrarlanabilir yapılar elde etmek için önemlidir, ki bu, şu anda projedeki tek geliştirici ben olsam bile genellikle hedeflediğim bir şey. Yerel depomu silebileceğimi ve yine de tüm yapıları yeniden oluşturabildiğimi ve diğer geliştiricilerin projeye kolayca katılabileceğini garanti ediyor. Bunu, bazen yerel olarak da çalışan, repo yöneticisine de erişen ve ayrıca projelerimi yayınlamaya yardımcı olan Jenkins ile temin ederim -> 2 kullanıcı repo yöneticisine erişiyor: Jenkins ve ben
Puce

0

Maven bunu yapar çünkü bağımlılığınız bir SNAPSHOT sürümünde ve maven, depodaki anlık görüntü sürümünde yapılan herhangi bir değişikliği algılayamaz. Yapınızı serbest bırakın ve pom.xml'deki sürümü bu sürüme değiştirin; maven artık meta veri dosyasını getirmeyecektir.

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.