Di bawah ini adalah error yang biasa saya dapatkan ketika koneksi internet saya lemas ketika mencoba membangun aplikasi web dengan maven.
Pertanyaan saya adalah, kenapa maven selalu harus mendownload setiap kali aplikasi yang sama telah dibuat sebelumnya.
Apa yang salah dalam konfigurasi saya yang membuat maven mengunduh setiap saat?
Di bawah ini adalah kesalahan yang saya dapatkan ketika saya mencoba membangun secara offline:
[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)
java
maven
maven-3
maven-metadata
quark
sumber
sumber
mvn clean install -o
-nsu
,--no-snapshot-updates
opsi denganmvn
Jawaban:
Cari elemen di
settings.xml
(atau, mungkin induk proyek atau induk perusahaan Anda)<repositories>
. Ini akan terlihat seperti di bawah ini.Perhatikan
<updatePolicy>
elemennya. Contoh ini memberi tahu Maven untuk menghubungi repo jarak jauh (Nexus dalam kasus saya, Maven Central jika Anda tidak menggunakan repo jarak jauh Anda sendiri) kapan saja Maven perlu mengambil artefak snapshot selama pembuatan, memeriksa untuk melihat apakah ada salinan yang lebih baru. Metadata diperlukan untuk ini. Jika ada salinan yang lebih baru, Maven mengunduhnya ke repo lokal Anda.Dalam contoh, untuk rilis, kebijakannya
daily
akan diperiksa selama pembuatan pertama Anda hari itu.never
juga merupakan opsi yang valid, seperti yang dijelaskan dalam dokumen pengaturan Maven .Plugin diselesaikan secara terpisah. Anda mungkin memiliki repositori yang dikonfigurasi untuk itu juga, dengan kebijakan pembaruan berbeda jika diinginkan.
Orang lain menyebutkan
-o
opsi tersebut. Jika Anda menggunakannya, Maven berjalan dalam mode "offline". Ia tahu itu hanya memiliki repo lokal, dan itu tidak akan menghubungi repo jarak jauh untuk menyegarkan artefak tidak peduli kebijakan pembaruan apa yang Anda gunakan.sumber
-U
atau artefak dihapus dari repo lokal dan karenanya perlu diunduh ulang.Mungkin menggunakan bendera
-o,--offline "Work offline"
untuk mencegahnya.Seperti ini:
maven compile -o
sumber
Saya kira karena Anda tidak menentukan versi plugin sehingga memicu unduhan metadata terkait untuk mendapatkan yang terakhir.
Jika tidak, apakah Anda mencoba memaksa penggunaan repo lokal menggunakan -o?
sumber
version
elemen di dalamplugin
elemen maka Anda memang telah mengkonfigurasinya, jika demikian saya kehabisan ide ... Semoga berhasilmaven-surefire-common
, yang belum saya sebutkan?pluginManagement
bagianSaya belum mempelajarinya, ketika Maven melakukan pencarian mana, tetapi untuk mendapatkan build yang stabil dan dapat direproduksi, saya sangat menyarankan untuk tidak mengakses Maven Respositories secara langsung tetapi untuk menggunakan Maven Repository Manager seperti Nexus.
Berikut adalah tutorial cara menyiapkan file pengaturan Anda:
http://books.sonatype.com/nexus-book/reference/maven-sect-single-group.html
http://maven.apache.org/repository-management.html
sumber
Maven melakukan ini karena ketergantungan Anda ada dalam versi SNAPSHOT dan maven tidak memiliki cara untuk mendeteksi perubahan apa pun yang dibuat pada versi snapshot tersebut di repositori. Lepaskan artefak Anda dan ubah versi di pom.xml ke versi tersebut dan maven tidak akan lagi mengambil file metadata.
sumber