Maven - Abhängigkeiten bereitstellen, um remote-repository
Ich habe ein paar Projekte mit VIEL maven-Abhängigkeiten. Wann rufe ich den Befehl mvn deploy (oder eine Variante davon), möchte ich nicht nur das Projekt selbst eingesetzt, um die remote-repository, sondern auch alle seine Abhängigkeiten als auch. Ist das möglich? Ich sehe viele 'ähnliche Fragen' auf dieser Seite, aber ich kann nicht scheinen, etwas zu finden, dass ist so einfach gesagt wie dieser. Alles andere, was ich gesehen habe scheint zu erwarten, die einige zusätzliche Funktionen. Ich möchte einfach mein Projekt bereitstellen, plus alle seine Abhängigkeiten, um das remote-repo. Ich bin mit dem maven-compiler-plugin-1.5
Dies ist ein Ausschnitt von meinem settings.xml. Keine Ahnung, was mir fehlt?
<mirrors>
<mirror>
<!--This is used to direct the public snapshots repo in the
profile below over to a different nexus group -->
<id>nexus-public-snapshots</id>
<mirrorOf>public-snapshots</mirrorOf>
<url>http://{ourServer}/nexus/content/groups/public-snapshots</url>
</mirror>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://{ourServer}/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>development</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<!--this profile will allow snapshots to be searched when activated-->
<id>public-snapshots</id>
<repositories>
<repository>
<id>public-snapshots</id>
<url>http://public-snapshots</url>
<releases><enabled>false</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public-snapshots</id>
<url>http://public-snapshots</url>
<releases><enabled>false</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
Vielen Dank im Voraus
~j
- Ich denke, Sie bekommen es falsch, mit maven bauen Sie es in Ihrer Entwicklungsumgebung und die Bereitstellung der zu erbringenden Leistung(jar,war,ear, oder osgi-bundle) an den server. was genau meinen Sie mit dem remote-repository??? ist es ein server??? oder ein code-repository???
- Nein. ich beziehe mich auf die Bereitstellung auf mein Firmen-remote-maven-repository, mit 'mvn deploy" in der Befehlszeile (oder "Ausführen Als" - > Maven Deploy" mit Eclipse m2Eclipse-plugin)
- wir sind mit sonatype nexus, wenn das einen Unterschied macht, obwohl ich denke, mvn install/mvn deploy-spezifische maven, nexus nicht
- möglich, Duplikat der stackoverflow.com/questions/207281/...
- Nein. Ich verlange nicht, für die Differenz zwischen mvn install und mvn deploy. Ich weiß schon, dass mvn install "installiert", um das lokale repository, und mvn deploy 'setzt' das remote-repository. Ich Frage für eine mögliche Art der Verwendung von mvn deploy, um nicht nur das Projekt bereitstellen, das remote-repository, sondern auch alle seine Abhängigkeiten.
- Wo und Wie bekommt man diese Abhängigkeiten zunächst? sollten Sie nicht download von "remote repository", wenn Sie zunächst die setup-Projekt, zum Beispiel mvn eclipse:eclipse.
- diese sind in der Regel Dritten Artefakte, die aus dem internet heruntergeladen, wie die commons-die E-Mail und schnell-md5, zum Beispiel. Diese Artefakte wurden Hinzugefügt, um Benutzern die lokalen repositories, aber nie Hinzugefügt, um die Fernbedienung (eigentlich das remote-repository noch nicht wirklich verwendet werden, um alle für ein paar Jahre). Also, was ich jetzt haben, ist ein remote-repository, das nicht aktuell und es fehlen auch bestimmte Abhängigkeiten. Ich könnte natürlich nun alle Artefakte in meinem \.m2 Verzeichnis und verwenden mvn deploy:deploy-file, aber das würde ewig dauern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie beginnen mit einem sauberen lokalen repository, Versuch Ihrer Anwendung zu erstellen und für jede Abhängigkeit Misserfolg, bereitstellen, dass die Anwendung auf Ihre Unternehmens-repository. Dies würde sicherstellen, dass alle Abhängigkeiten, die Ihre Anwendung befindet sich in der Unternehmens-repository vor Ihrer Anwendung immer gebaut und eingesetzt werden.
Davor, Sie würden konfigurieren Ihr lokales repository zu spiegeln
central
und anderen bekannten repositories, so dass open-source-Bibliotheken von Drittanbietern automatisch in das remote-repository anstatt manuell hochgeladen.Kann es sich herausstellen, dass Sie möglicherweise nicht zu viele third-party-Bibliotheken, die Sie benötigen würden, um manuell bereitstellen.
mirror
central
und andere benötigte repositories, sowie erlauben den Einsatz von Projekt-spezifischen Artefakten. Letzteres wäre fertig mitmvn deploy
.mvn deploy
, es zieht alles notwendige, von der zentralen auf mein lokales repo, und auch das bereitstellen von allem, was erforderlich sind, um die remote-repo?development
undpublic-snapshots
Profil?Schlage ich folgende Lösung, die schaut um einiges weniger wie trial und error für das auflösen von Abhängigkeiten im Vergleich zu den bestehenden Antworten.
Was Sie tun können, ist zu nennen
mvn -Dmdep.copyPom=true dependency:copy-dependencies
nach der Bereitstellung der wichtigsten Projekt. Dies wird kopieren transitiv alle Abhängigkeiten Ihres Projekts zutarget/dependency
einschließlich Ihrer jeweiligen pom-Dateien.Können Sie dann Durchlaufen Sie alle Abhängigkeiten und stellen Sie Sie in das repository mit
deploy:deploy-file
, z.B. mit so einem bash-Schleife:Hier ist, wie es funktioniert, kurz gesagt, vorausgesetzt, Ihre remote-repository (Nexus oder Artifactory, oder ähnliches) und
settings.xml
richtig konfiguriert sind.Lassen Sie uns sagen, Sie haben ein Projekt mit einer Abhängigkeit von
commons-logging
. Wenn Maven löst Ihre Projekt-Abhängigkeiten als Teil eines build, macht Sie diese Schritte:commons-logging
.commons-logging
in das remote-repo.commons-logging
. Dann ist es für Maven zum download ins lokale repo. Getan; weiter mit bauen.Am Ende dieser Schritte
commons-logging
werden sollte, sowohl Ihre lokalen und remote-repos mit nichts weiter zu tun. Wenn dies nicht der Fall, dann ist entweder Ihresettings.xml
ist nicht so konfiguriert, dass die Verbindung zum remote-repo bei der Suche nach Abhängigkeiten (ist die Kontaktaufnahme mit zentrale direkt?) Nexus oder ist nicht richtig konfiguriert.---- Bearbeiten ----
Hier ist ein Ausschnitt von meinem settings.xml das funktioniert. @Raghuram gab Ihnen ein gutes Trinkgeld, wenn er Ihnen vorgeschlagen, damit beide profile; wenn Sie irgendwie aktiviert, kann nur der
public-snapshots
Profil builds würde fortfahren, zu schlagen, maven central direkt.Hinweis: die
activeProfiles
element an der Unterseite; das ist, wie zu gewährleisten, werden Sie mit Nexus statt Maven central mit jedemmvn
Befehl.Müssen Sie noch sicherstellen, dass Nexus ist so konfiguriert, dass die URL definiert, die in der
<mirror>
enthält Inhalte aus dem Maven-central, aber wie konfigurieren Nexus wäre eine separate Frage.Referenz: Nexus docs für die Maven-Konfiguration