2010-11-04 10 views
20

Unser internes Repository (Artifactory) enthält jetzt sowohl die Stable-Builds als auch SNAPSHOT-Versionen unserer internen Bibliotheken.Maven kann SNAPSHOT-Builds aus dem Repository nicht erhalten

Für stabile Builds gab es nie Probleme beim Herunterladen von Dateien aus dem Repository.

Wenn ich jedoch ein -SNAPSHOT hinzufüge, behauptet Maven, die Abhängigkeit nicht finden zu können, obwohl sie definitiv im Repository ist.

Wenn ich die Abhängigkeit lokal erstellen und bereitstellen (d. H. In meinen lokalen Repo), funktioniert alles normal.

Grundsätzlich funktioniert das:

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>ourlibrary</artifactId> 
    <version>1.0.0</version> 
</dependency> 

und dies nicht:

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>ourlibrary</artifactId> 
    <version>1.0.1-SNAPSHOT</version> 
</dependency> 

Obwohl beide Versionen die gleiche Art und Weise gebaut und eingesetzt werden (soweit ich vielleicht sagen kann) richtig zum Repository.

Der Fehler:

Missing: 
---------- 

1) com.example:ourlibrary:jar:1.0.1-SNAPSHOT, 

    Try downloading the file manually from the project website. 

    Then, install it using the command: 
     mvn install:install-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file 

    Alternatively, if you host your own repository you can deploy the file there: 
     mvn deploy:deploy-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id] 

    Path to dependency: 
     1) com.example:product:war:2.0.0-SNAPSHOT 
     2) com.example:ourlibrary:jar:1.0.1-SNAPSHOT, 

Das klingt ähnlich wie this Frage, die Auflösung bei dort angekommen nicht auf meinen Fall anzuwenden.

Alle Einblicke in dieses Problem würden sehr geschätzt werden.

bearbeiten

mit -X Laufen (als John V. vorgeschlagen) ergab folgendes:

[DEBUG] Skipping disabled repository central 
[DEBUG] ourlibrary: using locally installed snapshot 
[DEBUG] Skipping disabled repository central 
[DEBUG] Using mirror: http://repo.example.com/repo (id: repo.example.com) 
[DEBUG] Artifact not found - using stub model: Unable to download the artifact from any repository 

    com.example:ourlibrary:pom:1.0.1-SNAPSHOT 

from the specified remote repositories: 
    repo.example.com (http://repo.example.com/repo) 


[DEBUG] Using defaults for missing POM com.example:ourlibrary:pom:1.0.1-SNAPSHOT:compile 
[DEBUG] com.example:ourlibrary:jar:1.0.1-SNAPSHOT:compile (selected for compile) 

Antwort

12

Zwei Gedanken kommen in den Sinn:

  1. Die Pfadstruktur in Ihr internes Repository für Ihr Artefakt ist falsch. Ich schlage vor, den Befehl maven mit dem Parameter -X auszuführen. Es zeigt den Versuch des Maven Herunterladen der Dateien. Holen Sie sich die Zeile , die Ihr Repository als URL hat und versuchen Sie es selbst suchen.

    sollte der Weg aussehen

    /com/example/ourlibrary/1.0.1/ourlibrary-1.0.1-SNAPSHOT.jar

  2. Sie didnt Repository als ein Repository in Ihrem pom enthalten. xml
+2

Ich habe die repo im POM nicht erklären, sondern in den Maven-Einstellungen festgelegt, dass unsere Repo ein universelles war (*) Spiegel.Sollte das nicht ausreichen (es reicht sicherlich für die stabilen Builds)? Das Hinzufügen einer expliziten Deklaration zu dem POM scheint das Problem zu beheben. – Kris

+0

Ich habe leider nicht viel Arbeit mit der settings.xml für Repositories getan. Ich habe sie in einen Eltern-Pom eingefügt, sodass jeder Entwickler, der neu startet, sich nicht um die settings.xml kümmern muss, falls sich das Repository ändern muss (was es eigentlich für uns hat) –

+14

Ich denke, ich habe das durchdacht. Für stabile Builds wird Maven standardmäßig auf 'central' gesetzt, was meine Spiegeleinstellungen zu unserem Repository weiterleiten. Für SNAPSHOT-Builds gibt es keinen Standard (da central sie nicht behandelt) und in Ermangelung eines POM, der ein Repo spezifiziert (das * SNAPSHOT-Builds * behandelt), wird es einfach fehlschlagen, ohne es selbst zu versuchen. – Kris

11

In der Regel haben Sie eine separate Snapshots URL von den Releases URL. Nur verschiedene Pfade im selben Repository, aber als separate Repositorys im Pom aufgeführt. Die eine für Schnappschüsse muss Schnappschüsse aktiviert sein, und der Computer für Veröffentlichungen hat Schnappschüsse deaktiviert:

<repositories> 
     <repository> 
      <id>central</id> 
      <url> 
       http://<releases-url> 
      </url> 
      **<snapshots> 
       <enabled>false</enabled> 
      </snapshots>** 
     </repository> 

     <repository> 
      <id>snapshots</id> 
      <url> 
       http://<snapshots-url> 
      </url> 
      <snapshots> 
       **<enabled>true</enabled>** 
       <!-- never, daily, interval:X (where X is in minutes) or always --> 
       <!--<updatePolicy>daily</updatePolicy> --> 
      </snapshots> 
      <releases> 
       <enabled>false</enabled> 
      </releases> 
     </repository> 
    </repositories> 
+0

Das funktioniert, obwohl du beachten solltest, dass dies unter den Profilen der Maven settings.xml-Datei geschieht. – Kris

+0

Wir behalten es in unserer Master/Eltern-Pom-Datei, von der alle unsere Projekte erben. Auf diese Weise müssen Entwickler das nicht in ihren settings.xml-Dateien konfigurieren. Settings.xml ist hauptsächlich für Dateien gedacht, die maschinen- oder benutzerspezifisch sind, und alle Entwickler eines Projekts sollten normalerweise dasselbe Repository verwenden. Während Sie Repositories in der Datei settings.xml ablegen können, würde ich denken, dass dies ein Ausnahmefall wäre und nicht die Norm. – kevinmrohr

+0

Sehr seltsam, dass ich Snapshots ohne dieses bereitstellen kann, aber es ist nicht möglich, bereitgestellte Shapshots herunterzuladen. Die Profileinrichtung funktioniert einwandfrei. – Betlista

Verwandte Themen