Saya menggunakan Maven 3.3.3 dengan Java 8 di Mac Yosemite. Saya memiliki proyek multi-modul.
<modules>
<module>first-module</module>
<module>my-module</module>
…
</modules>
Ketika saya membangun salah satu modul anak saya, misalnya, "modul-saya" dari atas, menggunakan "mvn clean install", build tersebut mencoba mengunduh artefak modul anak dari repositori jarak jauh yang telah saya tentukan di ~ / .m2 saya /settings.xml. Outputnya di bawah
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.9 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151104.200545-4.pom
Bagaimana cara memaksa Maven untuk memeriksa ~ / .m2 / repositori lokal saya terlebih dahulu sebelum mencoba mengunduh dari repositori jarak jauh? Di bawah ini adalah tempat saya menetapkan repositori jarak jauh di file ~ / .m2 / settings.xml saya…
<profile>
<id>releases</id>
<activation>
<property>
<name>!releases.off</name>
</property>
</activation>
<repositories>
<repository>
<id>releases</id>
<url>https://my.remoterepository.com/nexus/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
<profile>
<id>snapshots</id>
<activation>
<property>
<name>!snapshots.off</name>
</property>
</activation>
<repositories>
<repository>
<id>snapshots</id>
<url>https://my.remoterepository.com/nexus/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
Sunting: Menanggapi jawaban yang mengatakan bahwa unduhan terjadi ketika artefak tidak ada, di bawah ini adalah output terminal tempat saya membuktikan file itu ada di repo saya tetapi Maven tetap mencoba mengunduhnya ...
Daves-MacBook-Pro-2:my-module davea$ ls -al ~/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
-rw-r--r-- 1 davea staff 10171 Nov 5 10:22 /Users/davea/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
Daves-MacBook-Pro-2:my-module davea$ mvn clean install
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for org.mainco.subco:my-module:jar:87.0.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-antrun-plugin @ org.mainco.subco:my-module:[unknown-version], /Users/davea/Documents/sb_workspace/my-module/pom.xml, line 678, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.8 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151106.043202-8.pom
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first- module-87.0.0-20151106.043202-8.pom (3 KB at 21.9 KB/sec)
Downloading: http://download.java.net/maven/2/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
settings.xml
(lihat di sini ).Jawaban:
Dependensi memiliki versi snapshot. Untuk snapshot, Maven akan memeriksa repositori lokal dan jika artefak yang ditemukan di repositori lokal terlalu tua, Maven akan mencoba mencari yang diperbarui di repositori jarak jauh. Itu mungkin yang Anda lihat.
Perhatikan bahwa perilaku ini dikontrol oleh
updatePolicy
direktif dalam konfigurasi repositori (yang secaradaily
default untuk repositori snapshot).sumber
Gunakan
mvn --help
dan Anda dapat melihat daftar opsi.Ada opsi seperti
-nsu,--no-snapshot-updates Suppress SNAPSHOT updates
Jadi gunakan perintah
mvn install -nsu
dapat memaksa kompilasi dengan repositori lokal.sumber
-o
untuk perilaku maven "offline"Untuk benar-benar memaksa maven hanya menggunakan repo lokal Anda, Anda dapat menjalankannya dengan
mvn <goals> -o
. The-o
memberitahu maven untuk membiarkan Anda bekerja "offline", dan itu akan tetap off jaringan.sumber
mvn dependency:go-offline
Ikuti langkah-langkah di bawah ini:
Misalnya file seperti .repositories, .pom, .sha1, .lastUpdated dll.
mvn clean install -o
perintahIni akan membantu untuk menggunakan file jar repositori lokal daripada menghubungkan ke repositori apa pun.
sumber
*.repositories
dan*.sha1
file berfungsi untuk sayaDalam kasus saya, saya memiliki proyek multi modul seperti Anda. Saya harus mengubah ID grup dari salah satu perpustakaan eksternal yang menjadi tempat proyek saya bergantung seperti yang ditunjukkan di bawah ini.
Dari:
<dependencyManagement> <dependency> <groupId>org.thirdparty</groupId> <artifactId>calculation-api</artifactId> <version>2.0</version> <type>jar</type> <scope>provided</scope> </dependency> <dependencyManagement>
Untuk:
<dependencyManagement> <dependency> <groupId>org.thirdparty.module</groupId> <artifactId>calculation-api</artifactId> <version>2.0</version> <type>jar</type> <scope>provided</scope> </dependency> <dependencyManagement>
Perhatikan bagian <groupId>. Ternyata saya lupa memodifikasi bagian submodul terkait yang menentukan ketergantungan ini di file pom mereka.
Itu membuat saya sangat gila karena modulnya tersedia secara lokal.
sumber
Opsi -o tidak berfungsi untuk saya karena artefak masih dalam pengembangan dan belum diunggah dan maven (3.5.x) masih mencoba mengunduhnya dari repositori jarak jauh karena ini pertama kalinya, sesuai dengan kesalahan yang saya dapatkan.
Namun ini memperbaikinya untuk saya: https://maven.apache.org/general.html#importing-jars
Setelah penginstalan manual ini, Anda juga tidak perlu menggunakan opsi offline.
MEMPERBARUI
Saya baru saja membangun kembali ketergantungan dan saya harus mengimpornya kembali: yang biasa
mvn clean install
tidak cukup bagi sayasumber
Bahkan ketika mempertimbangkan semua jawaban di atas, Anda mungkin masih mengalami masalah yang akan menghentikan maven offline build Anda dengan kesalahan. Terutama, Anda mungkin mengalami peringatan sebagai berikut:
Peringatan tersebut akan segera diikuti oleh kesalahan lebih lanjut dan maven akan dihentikan.
Bagi kami, cara teraman untuk membangun offline dengan cache offline maven yang dibuat mengikuti petunjuk di atas adalah dengan menggunakan parameter offline maven berikut:
mvn -o -llr -Dmaven.repo.local=<path_to_your_offline_cache> ...
Terutama, opsi -llr mencegah Anda dari keharusan menyetel cache lokal Anda seperti yang diusulkan dalam jawaban # 4.
Juga perhatikan bahwa parameter localRepository di settings.xml disetel sebagai berikut:
<localRepository>${user.home}/.m2/repository</localRepository>
sumber
Saya memiliki masalah yang sama persis. Menjalankan
mvn clean install
alih-alihmvn clean compile
menyelesaikannya. Perbedaan hanya terjadi saat menggunakan multi-maven-project karena dependensi project diunggah ke repositori lokal dengan menggunakan install.sumber
Maven selalu memeriksa repositori lokal Anda terlebih dahulu, namun ketergantungan Anda perlu diinstal di repo Anda agar maven dapat menemukannya.
Jalankan
mvn install
modul dependensi Anda terlebih dahulu, lalu buat modul dependen Anda.sumber