2009-08-13 4 views
5

Ich möchte Maven zwingen, die 'maven-metadata.xml' für jedes Artefakt herunterzuladen, das ich in meinem lokalen Repository habe.Wie erzwinge Maven den Download von maven-metadata.xml aus dem zentralen Repository?

Das Maven-Standardverhalten besteht darin, nur Metadaten von Remote-Repositorys herunterzuladen (siehe this question).

Warum ich tun möchte, dass:

Derzeit ein Remote-Repository in einem Build-Rechner läuft ich habe. Mit Remote-Repository meine ich ein Verzeichnis, das sich in der Build-Maschine befindet, die alle Abhängigkeiten enthält, die ich brauche, um meine Maven-Projekte zu erstellen. Beachten Sie, dass ich keinen Repository-Manager wie Nexus verwende. Das Repository ist lediglich eine Kopie eines lokalen Repositorys, das ich auf meinen Build-Rechner hochgeladen habe.

Da jedoch mein lokales Repository die Dateien 'maven-metadata.xml' nicht enthält, fehlen diese Metadatendateien auch im Build-Maschinen-Repository. Wenn ich die Metadatendateien aus dem zentralen Repository abrufen könnte, wäre es möglich, ein funktionierendes Remote-Repository auf meine Build-Maschine zu laden.

+0

Ich bin mir nicht ganz klar, was du meinst, oder warum müssen Sie dies tun. Kannst du erklären, was du erreichen willst? –

Antwort

8

Sie möchten die Metadaten nicht aus den öffentlichen Repositorys abrufen, da sie alle verfügbaren Versionen eines bestimmten Artefakts enthalten, während Ihr Repository eine Untergruppe der Releases enthält.

Es ist erwähnenswert, dass Sie mit einem Repository-Manager wirklich besser wären. Mit den folgenden Schritten können Sie Ihre Artefaktmetadaten einmal generieren. Wenn sich Ihre Anforderungen ändern, müssen Sie den Vorgang wiederholen oder die Dateien manuell aktualisieren. Warum also nicht einfach einen Manager verwenden? Nexus kann eigenständig ausgeführt werden und hat eine sehr geringe Stellfläche.


Auch wenn Sie nicht für einen Repository-Manager zur Verwendung von Nexus planen, können Sie es immer noch Ihre Metadaten zu erzeugen, verwenden.

  1. Zuerst install Nexus.
  2. Suchen Sie die Verknüpfung Arbeitsverzeichnis (standardmäßig $ {user.home}/Sonatype-Arbeit.
  3. Kopieren Sie Ihre lokale Repository-Inhalte auf den Nexus-Arbeit/releases Unterverzeichnis.
  4. Start Nexus und mit dem Nexus verbinden Startseite im Browser (standardmäßig http://localhost:8081/nexus)
  5. Melden Sie sich mit dem Administratorkonto (Passwort admin123)
  6. Klicken Sie auf den Repositorys Link auf der linken Seite.
  7. Wählen Sie das Label-Repository, Rechtsklick und klicken Rebuild Metadaten

In wenigen Augenblicken Sie die Metadaten für alle Artefakte erzeugt haben sollte. Sie können sie dann dorthin kopieren, wo Sie sie benötigen, und Nexus deinstallieren.

+1

Ich stimme zu, er braucht Shared Repos für die Build-und lokalen Maschinen. Es gibt keine Möglichkeit, dass er die beiden Kopien der Metadaten synchron hält – sal

+1

Die Lösung funktionierte für mich. Auch, dank sal für den Rat, aber was ich wirklich brauche, ist ein Workaround für das Problem, auch wenn ich verstehe, dass das nicht die ideale Lösung ist ... –

4

Die Standard-Repositories sind in der super pom.xml definiert, von der alle Poms standardmäßig erben.

Wenn Sie mit local wollen, dass Sie nur ~/.m2/repos/* verwenden möchten, dann arbeiten Sie im Offline-Modus. In <offline>true</offline> zu Ihrem settings.xml

Wenn durch lokale Suchen Sie nach Ihren lokalen Server, könnten Sie ein Repository-Manager wie Nexus installieren, ändern Sie Ihre Einstellungsdatei Nexus verwenden unter „Spiegel“ wie folgt aus:

<mirror> 
    <id>central-proxy</id> 
    <mirrorOf>central</mirrorOf> 
    <url>my/local/nexus/server</url> 
</mirror> 

Deaktivieren Sie Remote-Repositorys, die Sie nicht in Nexus verwenden möchten.

+0

Mit local meine ich ~/.m2/repos/*, aber wenn Sie entweder das Tag oder das -o Flag Maven verwenden, werden die 'maven-metada.xml' Dateien, die ich möchte, nicht heruntergeladen. –

+0

Ich denke, Sie müssen verschiedene Build- und Deploy-Repos für Ihre Remote-Maschine haben. Lassen Sie den Build-Rechner ein lokales Maven-Repo für Build verwenden, dann einen anderen Ort auf dem Datenträger für die Bereitstellung. Verwenden Sie einen Server, um das zweite Repository sichtbar zu machen. Außerdem möchten Sie, dass Ihre lokalen Builds in diesen 3. Repos bereitgestellt werden. Die Metadaten werden sich in dieser Situation selbst sortieren. – sal

+0

was & warum ''? Die obige Beschreibung hilft mir. – hari

1

Eine Sache, die ich fand, ist jemand, der eine anfängliche Suche von jarvana machte und dieses innerhalb des pom gelegt hatte und verursachte, dass eine MetadatenFehlermeldung auftritt. Dieses ...

<!-- <repository> 
     <id>jarvana</id> 
     <url>http://www.jarvana.com/jarvana/browse/</url> 
    </repository> --> 

..fixed es und der Fehler ging weg.

0

Repository-Manager ist großartig, aber ich möchte nicht installieren und auf meinem Laptop ausführen. Ich möchte nur Ressourcen sparen. So ist meine Lösung unter:

  1. Repository installieren, wie artifactory (https://www.jfrog.com/artifactory)
  2. Lauf durch diesen Server materialisiert (localhost: 8081)
  3. Lauf durch Remote-Server materialisiert (center.maven.org)
  4. herunterladen Cache-Inhalt von artefactory
  5. Fusion zu Ordner: Ordner Download von Schritt 4 und Ordner bei ~/.m2/Repository. Jetzt

Ich habe ein Repository offline mit vollem Inhalt (binär, Quelle, xml, MD5, SHA1)

Verwandte Themen