Maven'i çevrimdışı geliştirme için nasıl yapılandırırım?


117

Maven'ı kullanabilmek için bir noktada internet bağlantısı gerekiyor mu? Bu, özellikle derleme, temizleme, paketleme vb. İçin dahili maven eklentilerini almak anlamına mı geliyor?


İnternet erişimi olan herhangi bir makineniz var mı? Belki bir sunucu?
Marcelo

2
Yapıyoruz, ancak oradan geliştirme ortamına bir şeyler almak iyi, sıkıcı.

Yanıtlar:


163

Maven'i çevrimdışı modda çalıştırabilirsiniz mvn -o install. Elbette, yerel deponuzda bulunmayan tüm yapılar başarısız olacaktır. Maven dağıtılmış depolara dayalı değildir, ancak kesinlikle işleri daha sorunsuz hale getirir. Bu nedenle, birçok mağaza, merkezi depolarla aşamalı olarak senkronize edilen iç aynaları kullanır.

Ek olarak, mvn dependency:go-offlineçevrimdışı çalışmaya başlamadan önce tüm bağımlılıklarınızın yerel olarak kurulduğundan emin olmak için kullanılabilir.


Bu cevaba paralel olarak, mvn'nin "temel" eklentileri (yani derleyici) ile birlikte geldiğini keşfettim. Yani bu mvn kurulumuyla ihtiyacım olanı alabilirim.

8
Ayrıca , pom.xml'nizde belirtilen tüm bağımlılıkların yerel deponuzda mevcut olduğundan emin olmak için "mvn bağımlılığı: çevrimdışı" kullanabileceğinizi de göz önünde bulundurun .
Thorbjørn Ravn Andersen

10
Maalesef mvn dependency:go-offlinesadece gelmez değil herşeyi yakalamak. Örneğin, yeni bir sanal makinenin içinde, projemin bu hedefi çalıştırdıktan sonra bile bir şeyler indirmesi gerekiyor. Ayrıca bu konuya bakın .
phs

2
Deneyimlerim, -o seçeneğinin düzgün çalışmadığını ve çevrimdışı olma hedefinin tam bir çevrimdışı derlemeye izin vermek için yeterli olmadığını gösteriyor: Burada bulduğum çözüme bakın: stackoverflow.com/q/43661755/1767316
user1767316

-Llr bayrağını ek olarak -o olarak eklerseniz çalışmalıdır.
Udo

10

LAN'ınızda internet erişimi olan bir bilgisayarınız varsa, yerel bir Maven deposu yüklemelisiniz.

Artifactory Open Source'u tavsiye ederim . Kuruluşumuzda kullandığımız şey bu, kurulumu gerçekten çok kolay.

Yapay, inşa aracınız (Maven, Ant, Ivy, Gradle vb.) İle dış dünya arasında bir vekil görevi görür.

Uzak eserleri önbelleğe alır, böylece onları tekrar tekrar indirmenize gerek kalmaz.

Dahili yapılara yönelik istenmeyen (ve bazen güvenliğe duyarlı) harici istekleri engeller ve yapıların nasıl, nerede ve kim tarafından dağıtılacağını kontrol eder.

Artifactory'yi kurduktan sonra, Maven'leri settings.xmlgeliştirme makinelerinde değiştirmeniz yeterlidir :

<?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>

Bu çözümü kullandık çünkü geliştirme makinelerimizde internet erişimiyle ilgili sorunlar yaşadık ve bozuk dosyaları indiren veya hiç indirmeyen bazı eserler. O zamandan beri sorun yaşamadık.


LAN'a bağlı erişimi olan bir makine yok.

2
Yapay ile tüm deponuzu yedekleyebilir ve ardından LAN'daki bilgisayarlardan birine geri yükleyebilirsiniz.
Marcelo

7

Bunun için iki seçeneğiniz var:

1.) settings.xml'de değişiklik yapın bunu ilk etikete ekleyin

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

2.) Çevrimdışı komut için -o etiketini kullanın.

mvn -o clean install -DskipTests=true
mvn -o jetty:run

6

Maven'in yerel deponuzdaki bağımlılıklara ihtiyacı var. Bunları almanın en kolay yolu internet erişimidir (veya burada sağlanan diğer çözümleri kullanmak daha zordur).

Yani kullanarak çevrimdışı gitmek hazırlayabilirsiniz geçici internet erişimi elde edebilirsiniz farz maven-bağımlılık-eklentisi onun ile bağımlılık: go-çevrimdışı golü. Bu, tüm proje bağımlılıklarınızı yerel deponuza indirecektir (tabii ki bağımlılıklardaki / eklentilerdeki değişiklikler yeni internet / merkezi depo erişimi gerektirecektir).


4

Ne yazık ki dependency:go-offline, her şeyi önbelleğe almadığı için benim için çalışmadı, yani. POM dosyaları ve diğer bağımlılıklardan dolaylı olarak bahsedilir.

Geçici çözüm bir belirtmek için olmuştur yerel depo yeri dahilinde ya settings.xmlkayıtlı <localRepository>...</localRepository>veya çalıştırarak mvnile -Dmaven.repo.local=...parametresi. İlk proje derlemesinden sonra, gerekli tüm yapılar önbelleğe alınmalıdır ve ardından Maven derlemesini çevrimdışı modda ( mvn -o ...) çalıştırırken, depo konumuna aynı yollarla başvurabilirsiniz .


3

Çevrimdışı olmadan önce, çevrimdışı çalışırken gerekli olan her şeyin yerel deponuzda olduğundan emin olmalısınız. Üzerinde çalışmayı planladığınız proje (ler) / pom (lar) için "mvn bağımlılığı: çevrimdışı duruma geçme" nin çalıştırılması, bunu başarma çabalarını azaltacaktır.

Ancak genellikle hikayenin tamamı değildir, çünkü bağımlılık: çevrim dışı sadece "çıplak derleme" eklentilerini indirir ( çevrimdışı / çözümleme eklentileri tüm eklenti bağımlılıklarını çözmez ). Bu yüzden deploy / test / site eklentilerini (ve belki diğerlerini) ve bunların bağımlılıklarını deponuza indirmenin bir yolunu bulmalısınız.

Ayrıca bağımlılık: Çevrimdışı, pom'un yapıtının kendisini indirmez, bu nedenle bağımlılık yapmalısınız: gerekirse kopyalayın.

Bazen - MaDa'nın yazdığı gibi - çevrimdışıyken neye ihtiyacınız olacağını bilmiyorsunuz, bu da "yeterli" bir depoya sahip olmayı oldukça imkansız kılıyor.

Her neyse, düzgün doldurulmuş bir depoya sahip olduğunuzda, çevrimdışı olmak için Maven´ın settings.xml dosyasına sadece "<offline> true </offline>" eklemeniz gerekir.

Deponuzu doldurmak için kullandığınız Maven profilini (id) çevrimdışıyken değiştirmeyin. Maven, indirilen yapıları meta verilerinde profil kimliğine bağlı bir "kimlik" ile tanır.


3

IntelliJ kullanıyorsanız, Tercihler -> Oluşturma, Yürütme, Dağıtım -> Oluşturma Araçları -> Maven'a gidip Çevrimdışı çalış'ı işaretleyebilir / işaretini kaldırabilirsiniz .


1
Benzer şekilde - Eclipse is Window -> Preferences -> Maven ve "Offline" seçeneğini işaretleyin
Stuart Brock

2

Bu senin için uygun mu?

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

Eklenti deponuza eklemeyi ve url'yi deponuzun olduğu yere yönlendirmeyi unutmayın.

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

Değilse, makinelerinizde apache gibi yerel bir sunucu çalıştırmanız gerekebilir.


Bu, jetty, tomcat, vb. Eklentiler gibi bağımlılıklar ve eklentiler için daha fazla görünüyor. Maven-compiler-plugin gibi dahili maven eklentileri hakkında daha çok endişeliyim

1
@predhme: Bu yaklaşım tüm eklentiler için işe yarayacak, çünkü bunların tümü yerel makinenizdeki maven deposuna
gidiyor

2


(kaynak: jfrog.com )

veya

Sonatype Nexus http://www.sonatype.org/nexus/ veya JFrog Artifactory https://www.jfrog.com/artifactory/ gibi Maven depo sunucularını kullanmanız yeterlidir .

Bir geliştirici bir proje oluşturduktan sonra, sonraki geliştiriciler veya Jenkins CI tarafından derlemek İnternet erişimi gerektirmez.

Maven depo sunucusu ayrıca Maven Central'a (veya daha fazla ihtiyaç duyulan genel depolara) erişmek için yapılandırılmış proxy'lere sahip olabilir ve uzak depolarda cynch'lenmiş yapı listesine sahip olabilirler.


1

Deneyimlerim, -o seçeneğinin düzgün çalışmadığını ve çevrimdışı olma hedefinin tam bir çevrimdışı derlemeye izin vermek için yeterli olmaktan uzak olduğunu gösteriyor:

Doğrulayabildiğim çözüm --legacy-local-repository, -o(çevrimdışı) yerine maven seçeneğinin kullanımını ve dağıtım deposu yerine yerel deponun kullanılmasını içeriyor.

Ek olarak, maven-metadata-maven2_central.xmlyerel deponun her dosyasını maven-metadata.xmlmaven'in beklediği forma kopyalamak zorunda kaldım .

Burada bulduğum çözüme bakın .


0

Sorunuzu doğrudan yanıtlamak: İnternet bağlantısı gerektirmez, ancak bir havuza, LAN veya yerel diskte erişim gerektirir (burada yazan diğer kişilerin ipuçlarını kullanın).

Projeniz olgun bir aşamada değilse, bu, POM'lar oldukça sık değiştirildiğinde, deponuzu da sık sık güncellemeniz gerekeceğinden, çevrimdışı modun çok pratik olmayacağı anlamına gelir. İhtiyacınız olan her şeye sahip bir deponun bir kopyasını alamazsanız, ama nasıl bilebilirsiniz? Genellikle bir depoyu sıfırdan başlatırsınız ve geliştirme sırasında (başka bir depoya bağlı bir bilgisayarda) aşamalı olarak klonlanır. Repo1.maven.org genel deposunun bir kopyası yüzlerce gigabayt ağırlığındadır, bu yüzden kaba kuvvet de önermem.


Bu, ancak bir maven projesi (karınca) olarak değil. Bu yüzden ihtiyacım olan tüm kitaplara sahibim ama özellikle maven iç kitaplarını merak ediyordum. Maven-eklenti-derleyici gibi.

Ant tarafından ele alınan tüm bağımlılıklara sahipseniz, muhtemelen yine de Maven meta verilerinden yoksunuz, bu nedenle Maven onları almayacaktır. "Maven dahili kütüphanelerine" gelince, onları indirmenin tek yolu, pom yapınızı oluşturmak ve internete bağlı bir bilgisayarda çalıştırmaktır. "Çalıştır" derken, yalnızca "mvn clean install" değil, kullanacağınızı düşündüğünüz her hedefi çalıştırmayı kastediyorum.
MaDa

0

Çevrimdışı çalışmadan önce hazırlık aşamasında sadece çalıştırın mvn dependency:go-offline


0

Aşağıdaki eksiklikleri gidermek için yeni bir eklenti ortaya çıktı mvn dependency:go-offline:

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

Onu ponponun içine ekle, sonra koş mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies. Tüm dinamik bağımlılıkları kurduktan sonra, maven bir daha hiçbir şey indirmeyi denemeyecektir (siz sürümleri güncelleyene kadar).


-2
<offline> false </offline>

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

için

<offline> true <offline>

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

Çevrimdışı etiketi yanlıştan doğruya değiştirin.

çevrimiçi depodan indirilecek

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.