Bagaimana cara mengkonfigurasi Maven untuk pengembangan offline?

117

Apakah maven memerlukan koneksi ke internet di beberapa titik untuk dapat menggunakannya? Berarti secara khusus mendapatkan plugin maven internal untuk kompilasi, pembersihan, pengemasan, dll?


sumber
Apakah Anda memiliki mesin dengan akses internet? Mungkin server?
Marcelo
2
Kami melakukannya, tetapi mengirimkan sesuatu dari sana ke lingkungan pengembangan itu baik, membosankan.

Jawaban:

163

Anda dapat menjalankan maven dalam mode offline mvn -o install. Tentu saja artefak apa pun yang tidak tersedia di repositori lokal Anda akan gagal. Maven tidak didasarkan pada repositori terdistribusi, tetapi mereka pasti membuat segalanya lebih mulus. Karena alasan inilah banyak toko menggunakan mirror internal yang secara bertahap disinkronkan dengan repositori pusat.

Selain itu, mvn dependency:go-offlinedapat digunakan untuk memastikan Anda memiliki semua dependensi yang diinstal secara lokal sebelum Anda mulai bekerja secara offline.

nsfyn55.dll
sumber
Tidak sesuai dengan jawaban ini, saya menemukan bahwa mvn hadir dengan plugin "inti" (yaitu kompiler). Jadi ini dengan mvn install saya bisa mendapatkan apa yang saya butuhkan.
8
Pertimbangkan juga Anda dapat menggunakan "mvn dependency: go-offline" untuk memastikan semua dependensi yang dirujuk di pom.xml ada di repositori lokal Anda.
Thorbjørn Ravn Andersen
10
Sayangnya mvn dependency:go-offlinehanya tidak tidak menangkap segalanya. Di dalam mesin virtual baru, misalnya, proyek saya masih harus mengunduh banyak hal bahkan setelah menjalankan tujuan ini. Lihat juga masalah ini .
phs
2
Pengalaman saya menunjukkan bahwa opsi -o tidak berfungsi dengan baik dan bahwa tujuan pergi-offline jauh dari cukup untuk memungkinkan pembangunan offline penuh: Lihat solusi yang saya temukan di sini: stackoverflow.com/q/43661755/1767316
user1767316
Jika Anda menambahkan flag -llr sebagai tambahan ke -o, seharusnya berfungsi.
Udo
10

Jika Anda memiliki PC dengan akses internet di LAN, Anda harus menginstal repositori Maven lokal.

Saya merekomendasikan Open Source Artifactory . Inilah yang kami gunakan di organisasi kami, sangat mudah untuk disiapkan.

Artifactory bertindak sebagai proxy antara alat build Anda (Maven, Ant, Ivy, Gradle, dll.) Dan dunia luar.

Ini menyimpan artefak jarak jauh sehingga Anda tidak perlu mengunduhnya lagi dan lagi.

Ini memblokir permintaan eksternal yang tidak diinginkan (dan terkadang sensitif keamanan) untuk artefak internal dan mengontrol bagaimana dan di mana artefak disebarkan, dan oleh siapa.

Setelah menyiapkan Artifactory, Anda hanya perlu mengubah Maven settings.xmldi mesin pengembangan:

<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <mirrors>
    <mirror>
      <mirrorOf>*</mirrorOf>
      <name>repo</name>
      <url>http://maven.yourorganization.com:8081/artifactory/repo</url>
      <id>repo</id>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>libs-release</name>
          <url>http://maven.yourorganization.com:8081/artifactory/libs-release</url>
        </repository>
        <repository>
          <snapshots />
          <id>snapshots</id>
          <name>libs-snapshot</name>
          <url>http://maven.yourorganization.com:8081/artifactory/libs-snapshot</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>plugins-release</name>
          <url>http://maven.yourorganization.com:8081/artifactory/plugins-release</url>
        </pluginRepository>
        <pluginRepository>
          <snapshots />
          <id>snapshots</id>
          <name>plugins-snapshot</name>
          <url>http://maven.yourorganization.com:8081/artifactory/plugins-snapshot</url>
        </pluginRepository>
      </pluginRepositories>
      <id>artifactory</id>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>artifactory</activeProfile>
  </activeProfiles>
</settings>

Kami menggunakan solusi ini karena kami memiliki masalah dengan akses internet di mesin pengembangan kami dan beberapa artefak mengunduh file rusak atau tidak mengunduh sama sekali. Kami tidak memiliki masalah sejak itu.

Marcelo
sumber
Tidak ada mesin dengan akses yang terhubung ke LAN.
2
Dengan artifactory Anda dapat membuat cadangan seluruh repositori Anda dan kemudian mengembalikannya di salah satu PC yang ada di LAN.
Marcelo
7

Anda memiliki dua opsi untuk ini:

1.) buat perubahan di settings.xml tambahkan ini di tag pertama

<localRepository>C:/Users/admin/.m2/repository</localRepository>

2.) gunakan -o tag untuk perintah offline.

mvn -o clean install -DskipTests=true
mvn -o jetty:run
Jyoti Prakash
sumber
6

Maven membutuhkan dependensi di repositori lokal Anda. Cara termudah untuk mendapatkannya adalah dengan akses internet (atau lebih sulit menggunakan solusi lain yang disediakan di sini).

Jadi diasumsikan bahwa Anda bisa mendapatkan akses internet sementara Anda bisa bersiap untuk pergi offline menggunakan maven-dependency-plugin dengan ketergantungannya: tujuan go-offline . Ini akan mengunduh semua dependensi proyek Anda ke repositori lokal Anda (tentu saja perubahan dalam dependensi / plugin akan membutuhkan akses repositori internet / sentral baru).

FrVaBe
sumber
4

Sayangnya dependency:go-offlinetidak berhasil untuk saya karena tidak menyimpan semuanya, yaitu. File POM dan dependensi lainnya yang secara implisit menyebutkan.

Solusi telah menentukan lokasi repositori lokal , baik di dalam settings.xmlberkas dengan <localRepository>...</localRepository>atau dengan menjalankan mvndengan -Dmaven.repo.local=...parameter. Setelah pembuatan proyek awal, semua artefak yang diperlukan harus disimpan dalam cache, lalu Anda dapat mereferensikan lokasi repositori dengan cara yang sama, saat menjalankan pembuatan Maven dalam mode offline ( mvn -o ...).

luka5z
sumber
3

Sebelum offline, Anda harus memastikan bahwa semuanya ada di repo lokal Anda, yang diperlukan saat bekerja offline. Menjalankan "mvn dependency: go-offline" untuk project / pom (s), yang ingin Anda kerjakan, akan mengurangi upaya untuk mencapai ini.

Tetapi biasanya ini bukan keseluruhan cerita, karena ketergantungan: go-offline hanya akan mengunduh plugin "bare build" ( go-offline / menyelesaikan-plugin tidak menyelesaikan semua dependensi plugin ). Jadi, Anda harus menemukan cara untuk mengunduh plugin deploy / test / site (dan mungkin yang lain) dan dependensinya ke repo Anda.

Selanjutnya ketergantungan: go-offline tidak mengunduh artefak pom itu sendiri, jadi Anda harus ketergantungan: salin jika diperlukan.

Kadang-kadang - seperti yang ditulis MaDa - Anda tidak tahu, apa yang akan Anda butuhkan, saat offline, yang membuatnya sangat tidak mungkin untuk memiliki repo yang "cukup".

Pokoknya memiliki repo yang terisi dengan baik Anda hanya perlu menambahkan "<offline> true </offline>" ke Maven's settings.xml untuk pergi offline.

Jangan ubah profil (id) Maven yang Anda gunakan untuk mengisi repo Anda, saat sedang offline. Maven mengenali artefak yang diunduh dalam metadatanya dengan "identitas", yang terikat ke id profil.

Eike Pögel
sumber
3

Jika Anda menggunakan IntelliJ, Anda cukup masuk ke Preferences -> Build, Execution, Deployment -> Build Tools -> Maven dan centang / hapus centang Work offline .

heez
sumber
1
Demikian pula - Eclipse is Window -> Preferences -> Maven dan centang "Offline"
Stuart Brock
2

Apakah ini Bekerja untukmu?

http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html

Jangan lupa untuk menambahkannya ke repositori plugin Anda dan arahkan url ke mana pun repositori Anda berada.

<repositories>
    <repository>
        <id>local</id>
        <url>file://D:\mavenrepo</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>local</id>
        <url>file://D:\mavenrepo</url>
    </pluginRepository>
</pluginRepositories>

Jika tidak, Anda mungkin perlu menjalankan server lokal, mis. Apache, di komputer Anda.

gigadot
sumber
Itu tampaknya lebih untuk dependensi dan plugin seperti plugin jetty, tomcat, dll. Saya lebih khawatir tentang plugin maven internal seperti maven-compiler-plugin
1
@predhme: Pendekatan ini akan bekerja untuk semua plugin, karena semua ini masuk ke repositori maven di mesin lokal Anda
JoseK
2


(sumber: jfrog.com )

atau

Cukup gunakan server repositori Maven seperti Sonatype Nexus http://www.sonatype.org/nexus/ atau JFrog Artifactory https://www.jfrog.com/artifactory/ .

Setelah satu pengembang membangun proyek, dibangun oleh pengembang berikutnya atau Jenkins CI tidak memerlukan akses Internet.

Server repositori Maven juga dapat memiliki proxy yang dikonfigurasi untuk mengakses Maven Central (atau repositori publik yang lebih dibutuhkan), dan mereka dapat memiliki daftar artefak yang disinkronkan di repositori jarak jauh.

Paul Verest
sumber
1

Pengalaman saya menunjukkan bahwa opsi -o tidak berfungsi dengan baik dan bahwa tujuan pergi-offline jauh dari cukup untuk memungkinkan pembangunan offline penuh:

Solusi yang dapat saya validasi mencakup penggunaan --legacy-local-repositoryopsi maven daripada opsi -o(offline) dan penggunaan repositori lokal sebagai pengganti repositori distribusi

Selain itu, saya harus menyalin setiap maven-metadata-maven2_central.xmlfile dari repo-lokal ke dalam maven-metadata.xmlformulir yang diharapkan oleh maven.

Lihat solusi yang saya temukan di sini .

pengguna1767316
sumber
0

Menjawab pertanyaan Anda secara langsung: tidak memerlukan koneksi internet, tetapi akses ke repositori, di LAN atau disk lokal (gunakan petunjuk dari orang lain yang diposting di sini).

Jika proyek Anda tidak dalam fase matang, itu berarti ketika POM cukup sering diubah, mode offline akan sangat tidak praktis, karena Anda juga harus memperbarui repositori Anda cukup sering. Kecuali Anda bisa mendapatkan salinan repositori yang memiliki semua yang Anda butuhkan, tapi bagaimana Anda tahu? Biasanya Anda memulai repositori dari awal dan itu akan dikloning secara bertahap selama pengembangan (di komputer yang terhubung ke repositori lain). Salinan repositori publik repo1.maven.org memiliki berat ratusan gigabyte, jadi saya juga tidak akan merekomendasikan brute force.

MaDa
sumber
Memang, tetapi bukan sebagai proyek pakar (semut). Jadi saya memiliki semua lib yang saya butuhkan tetapi bertanya-tanya secara khusus tentang maven internal libs. Seperti maven-plugin-compiler.
Jika Anda memiliki semua dependensi yang ditangani oleh Ant, Anda mungkin kekurangan metadata Maven, jadi Maven tidak akan mengambilnya. Sedangkan untuk "Maven internal libs", satu-satunya cara untuk mendownloadnya adalah dengan membangun struktur pom Anda dan menjalankannya di komputer yang terhubung ke internet. Yang saya maksud dengan "menjalankannya" adalah menjalankan setiap target yang Anda pikir akan Anda gunakan, tidak harus hanya "mvn clean install".
MaDa
0

Dalam persiapan sebelum bekerja offline jalankan saja mvn dependency:go-offline

msangel
sumber
0

Plugin baru tampaknya memperbaiki kekurangan mvn dependency:go-offline:

https://github.com/qaware/go-offline-maven-plugin

Tambahkan di pom Anda, lalu jalankan mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies. Setelah Anda mengatur semua dependensi dinamis, maven tidak akan mencoba mengunduh apa pun lagi (sampai Anda memperbarui versi).

Jiehong
sumber
-2
<offline> false </offline>

<localRepository>${user.home}/.m2/repository</localRepository>

untuk

<offline> true <offline>

<localRepository>${user.home}/.m2/repository</localRepository>

Ubah tag offline dari salah menjadi benar.

akan mengunduh dari repo online

dhanaraj k
sumber