Maven'i yapıları almak için uzak depolara gitmek yerine yerel depomu kullanmaya nasıl zorlarım?


101

Mac Yosemite'de Java 8 ile Maven 3.3.3 kullanıyorum. Çok modüllü bir projem var.

    <modules>
            <module>first-module</module>
            <module>my-module</module></modules>

Alt modüllerimden birini oluşturduğumda, örneğin "modülüm" yukarıdan, "mvn clean install" kullanarak, yapı, alt modül yapılarını ~ / .m2 dosyamda tanımladığım uzak bir depodan indirmeye çalışır. /settings.xml dosyası. Çıktı aşağıda

[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

Uzak depolardan indirmeyi denemeden önce Maven'i yerel ~ / .m2 / depomu kontrol etmeye nasıl zorlarım? Aşağıda, ~ / .m2 / settings.xml dosyamda tanımlanmış uzak depolarım var…

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

Düzenleme: İndirme işleminin eser yokken gerçekleştiğini söyleyen cevaba yanıt olarak, aşağıda dosyanın depomda olduğunu kanıtladığım terminal çıktısı var, ancak Maven yine de indirmeye çalışıyor ...

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

2
Maven , uzak bir depodan bir yapı indirmeye çalışmadan önce yerel deponuzu kontrol eder. Siz bu yapıyı denemeden önce yerelinizin bu eserlere sahip olduğundan emin misiniz? Yerel deponuzu şimdi inceleyebilir ve yine de başka bir derlemeyi deneyebilirsiniz. Ayrıca, yerel deponuzun nerede olduğunu da belirtebilirsiniz settings.xml( buraya bakın ).
mystarrocks

Settings.xml dosyamda depomu belirtmemiş olsam da, Maven'ın benim için ayarladığı varsayılandır - ~ / .m2 / repository. Varsayılan olsa bile bunu belirtmem gerekir mi?
Dave

Benim için yerel depolarımda * .sha1 veya * .lastUpdate gibi başka dosyalar var. * .jar ve * .pom dışındaki diğer dosyaları silmek, maven'in dosyayı uzak depodan yeniden indirmesini önleyecektir
Harun

Yanıtlar:


46

Bağımlılığın anlık görüntü sürümü var. Anlık görüntüler için, Maven yerel depoyu kontrol edecek ve yerel depoda bulunan yapı çok eski ise, uzak depolarda güncellenmiş bir tane bulmaya çalışacaktır. Muhtemelen gördüğünüz budur.

Bu davranışın updatePolicyarşiv yapılandırmasındaki yönerge tarafından kontrol edildiğini unutmayın (bu, dailyanlık görüntü havuzları için varsayılan olarak geçerlidir).


16
Konsol komut argümanı ile bunun "üzerine yazmak" mümkün mü? Gibi: mvn clean install -FORCE_COMMAND
Naxos84

21
"Çok eski" ne anlama geliyor? İster yerel ister uzak olsun, bulabileceği en yeni anlık görüntüyü seçer. Bu kesinlikle korkunç bir davranış olurdu. Yeni bir anlık görüntü oluşturduysam, CI yapısının bir dakika sonra oluşturduğu değil, gerçekten onu kullanmak istiyorum.
Tom Quarendon

Lütfen "Çok eski" nin ne anlama geldiğini biraz daha açıklayın.
Đỗ Công Bằng

34

Kullanın mvn --helpve seçenekler listesini görebilirsiniz.

Gibi bir seçenek var -nsu,--no-snapshot-updates Suppress SNAPSHOT updates

Bu nedenle, kullanım komutu mvn install -nsuyerel depo ile derlemeye zorlayabilir.


10
-o"Çevrimdışı" maven davranışı için de kullanabilirsiniz
Sean

8
-Nsu seçeneği, mvn'nin, yapının yerel olarak oluşturulduğu ve kurulduğu zamanki gibi yerel yapıyı kullanmak yerine henüz indirilmemişse bir yapıyı uzaktan indirmeyi denemesini ve başarısız olmasını engellemez. -
user1767316

Henüz indirilmemiş bir eserle aynı sorunu yaşadım ve bu benim için sorunu çözdü
Luigi Cristalli

16

Gerçekten maven'i yalnızca yerel deponuzu kullanmaya zorlamak için , ile koşabilirsiniz . Eğer "Çevrimdışı" çalışmasına olanak tanımak için, ve ağını devre dışı kalacak maven söyler.mvn <goals> -o-o


5
-O seçeneği, mvn'nin, yapının yerel olarak oluşturulduğu ve kurulduğu zamanki gibi yerel yapıyı kullanmak yerine henüz indirilmemişse bir yapıyı uzaktan indirmeyi denemesini ve başarısız olmasını engellemez.
user1767316

2
bu doğru - yerel bir kopyanız yoksa, şansınız yok. Bu, daha önce oluşturduğunuz projeler için kullanışlıdır, ancak muhtemelen umursamadığınız son SNAPSHOT değişiklikleri olabilir.
Sean

Ya da projeyi hiç inşa etmemiş olsanız bile çevrimdışı olarak inşa edilmesine hazırlanabilirsinizmvn dependency:go-offline
Aldian

Ya yeni yüklediğiniz yerel bir kopyanız varsa (bu nedenle asla dağıtılmaz / uzak anlık görüntü deposunda kullanılamaz)?
Vivek Chavda

1
Ah, az önce bir bağımlılık koleksiyonuyla bir pom projesi oluşturdum, ancak tüketen projede <type> pom </type> belirtmedim, bu yüzden bir kavanoz arıyordu (ve tabii ki bulamadı. çevrimdışı modda)
Vivek Chavda

5

Aşağıdaki adımları izleyin:

    1. Saklamak istediğiniz jar hariç, yerelinizde bulunan jar klasörünün tüm içeriğini sildiğinizden emin olun.
      Örneğin .repositories, .pom, .sha1, .lastUpdated vb. Dosyalar
    1. Yürüt mvn clean install -okomutu

Bu, herhangi bir havuza bağlanmak yerine yerel depo jar dosyalarının kullanılmasına yardımcı olacaktır.


1
Yalnızca *.repositoriesve *.sha1benim için çalışan dosyalar kaldırılıyor
DLight

4

Benim durumumda sizin gibi çoklu modül projem vardı. Projemin bağlı olduğu harici kütüphanelerden birinin grup kimliğini aşağıda gösterildiği gibi değiştirmek zorunda kaldım.

Kimden:

<dependencyManagement>
    <dependency>
        <groupId>org.thirdparty</groupId>
        <artifactId>calculation-api</artifactId>
        <version>2.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>
<dependencyManagement>

Kime:

<dependencyManagement>
   <dependency>
      <groupId>org.thirdparty.module</groupId>
        <artifactId>calculation-api</artifactId>
        <version>2.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>
<dependencyManagement>

<groupId> bölümüne dikkat edin. Bu bağımlılığı pom dosyalarında tanımlayan alt modüllerin ilgili bölümünü değiştirmeyi unuttuğum ortaya çıktı.

Modül yerel olarak mevcut olduğu için beni çok çılgına çevirdi.


2

-O seçeneği benim için işe yaramadı çünkü yapı hala geliştirme aşamasında ve henüz yüklenmemiş ve maven (3.5.x), aldığım hataya göre ilk kez olduğu için hala uzak depodan indirmeye çalışıyor.

Ancak bu benim için düzeltildi: https://maven.apache.org/general.html#importing-jars

Bu manuel kurulumdan sonra, çevrimdışı seçeneğini de kullanmaya gerek yoktur.

GÜNCELLEME

Bağımlılığı yeniden oluşturdum ve yeniden içe aktarmak zorunda kaldım: normal mvn clean installbenim için yeterli değildi


2

Yukarıdaki tüm yanıtları değerlendirirken bile, maven çevrimdışı yapınızı bir hatayla sonlandıracak sorunlarla karşılaşabilirsiniz. Özellikle follwos olarak bir uyarı ile karşılaşabilirsiniz:

[WARNING] The POM for org.apache.maven.plugins:maven-resources-plugin:jar:2.6 is missing, no dependency information available

Uyarının hemen ardından başka hatalar gelecek ve maven sona erecektir.

Bizim için, yukarıdaki ipuçlarını izleyerek oluşturulan bir maven çevrimdışı önbellekle çevrimdışı derlemenin en güvenli yolu aşağıdaki maven çevrimdışı parametrelerini kullanmaktır:

mvn -o -llr -Dmaven.repo.local=<path_to_your_offline_cache> ...

Özellikle seçenek -llr önerildiği gibi yerel önbelleğinizi ayarlamak zorunda önler.

Ayrıca settings.xml'deki localRepository parametresinin aşağıdaki gibi ayarlandığından emin olun:

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

0

Aynı sorunu yaşadım. Çözmek mvn clean installyerine çalıştırmak mvn clean compile. Proje bağımlılıkları yükleme kullanılarak yerel depoya yüklendiğinden, fark yalnızca multi-maven-project kullanılırken ortaya çıkar.


-1

Maven her zaman önce yerel deponuzu kontrol eder, ancak maven'in bulması için bağımlılığınızın deponuza yüklenmesi gerekir.

mvn installÖnce bağımlılık modülünüzde çalıştırın ve ardından bağımlı modülünüzü oluşturun.


1
Yapının depoda olduğunu göstermek için sorumu düzenledim (çalıştırdığım "ls -al" komutuna dikkat edin. Yine de Maven onu indirmeye çalışıyor. Başka bir fikir var mı?
Dave

6
@Oliver: Yerel depodaki eserler için, yapı çok eski bir anlık görüntüse Maven uzak depolara başvurabilir.
Andreas Veithen
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.