Ich habe Konfigurationsdateien und verschiedene Dokumente, die ich mit Maven2 aus der Dev-Umgebung in das Dev-Server-Verzeichnis kopieren möchte. Seltsamerweise scheint Maven bei dieser Aufgabe nicht stark zu sein.
Einige der Optionen:
- Verwenden Sie einfach eine Kopieraufgabe in Maven
<copy file="src/main/resources/config.properties" tofile="${project.server.config}/config.properties"/>
Verwenden Sie das Ant-Plugin, um eine Kopie von Ant auszuführen .
Erstellen Sie ein Artefakt vom Typ zip neben dem "Haupt" -Artefakt des POM, das normalerweise vom Typ jar ist , und entpacken Sie dieses Artefakt aus dem Repository in das Zielverzeichnis.
Maven-Resources- Plugin, wie unten erwähnt.
Maven Assembly Plugin - aber dies scheint viele manuelle Definitionen zu erfordern, wenn ich Dinge einfach und "konventionell" machen möchte.
Diese Seite zeigt sogar, wie man ein Plugin zum Kopieren erstellt!
Maven-Upload- Plugin, wie unten erwähnt.
Maven-Dependency-Plugin mit Kopie , wie unten erwähnt.
All dies scheint unnötig ad hoc zu sein: Maven soll diese Standardaufgaben ohne viel Aufhebens und Mühe erledigen.
Irgendein Rat?
quelle
Antworten:
Scheuen Sie sich nicht vor dem Antrun-Plugin. Nur weil manche Leute glauben, Ant und Maven seien in Opposition, sind sie es nicht. Verwenden Sie die Kopieraufgabe, wenn Sie eine unvermeidbare einmalige Anpassung vornehmen müssen:
Bei der Beantwortung dieser Frage konzentriere ich mich auf die Details Ihrer Fragen. Wie kopiere ich eine Datei? Die Frage und der Variablenname führen mich zu größeren Fragen wie: "Gibt es einen besseren Weg, um mit der Serverbereitstellung umzugehen?" Verwenden Sie Maven als Build-System, um bereitstellbare Artefakte zu generieren, und führen Sie diese Anpassungen dann entweder in separaten Modulen oder an einem anderen Ort vollständig durch. Wenn Sie ein bisschen mehr von Ihrer Build-Umgebung freigegeben haben, gibt es möglicherweise einen besseren Weg - es gibt Plugins, um eine Reihe von Servern bereitzustellen. Könnten Sie eine Assembly anhängen, die im Stammverzeichnis des Servers entpackt ist? Welchen Server verwenden Sie?
Ich bin mir wieder sicher, dass es einen besseren Weg gibt.
quelle
task
Parameter ist jetzt veraltet ( Antrun Plugin ). Sie solltentarget
stattdessen verwenden (seit 1.5). Leider gibt es Beispiele, die dies verwechseln; zBtarget
Parameter undversion
<1.5.quelle
Um eine Datei zu kopieren, verwenden Sie:
Verwenden Sie die nächste Konfiguration, um Ordner mit Unterordnern zu kopieren:
quelle
<filtering>
, unerwünschte Änderungen an z. B. Skriptdateien zu verhindern, die${...}
Variablen verwenden.Das Maven-Abhängigkeits-Plugin hat mir viel Zeit beim Stöbern mit Ameisenaufgaben gespart:
Die Abhängigkeit: copy ist documentend und hat nützlichere Ziele wie das Entpacken.
quelle
Für einfache Kopieraufgaben kann ich das Copy-Rename-Maven-Plugin empfehlen . Es ist unkompliziert und einfach zu bedienen:
Wenn Sie mehr als eine Datei kopieren möchten, ersetzen Sie das
<sourceFile>...</destinationFile>
Teil durchDarüber hinaus können Sie bei Bedarf mehrere Ausführungen in mehreren Phasen angeben. Das zweite Ziel ist "Umbenennen", das einfach das tut, was es sagt, während der Rest der Konfiguration gleich bleibt. Weitere Anwendungsbeispiele finden Sie auf der Nutzungsseite .
Hinweis : Dieses Plugin kann nur Dateien kopieren, keine Verzeichnisse. (Vielen Dank an @ james.garriss für das Auffinden dieser Einschränkung.)
quelle
Die oben genannte Ant-Lösung ist am einfachsten zu konfigurieren, aber ich hatte Glück mit dem Maven-Upload-Plugin von Atlassian. Ich konnte keine gute Dokumentation finden. So verwende ich sie:
Die Variablen wie "$ {jboss.host}", auf die oben verwiesen wird, sind in meiner Datei ~ / .m2 / settings.xml definiert und werden mithilfe von Maven-Profilen aktiviert. Diese Lösung ist nicht auf JBoss beschränkt, sondern genau das, was ich meine Variablen genannt habe. Ich habe ein Profil für Entwickler, Test und Live. Um mein Ohr auf eine jboss-Instanz in einer Testumgebung hochzuladen, würde ich Folgendes ausführen:
Hier ist ein Ausschnitt aus settings.xml:
Anmerkungen: Das Atlassian Maven Repo mit diesem Plugin finden Sie hier: https://maven.atlassian.com/public/
Ich empfehle, die Quellen herunterzuladen und in der Dokumentation nachzuschauen, um alle Funktionen des Plugins zu sehen.
`
quelle
Nun, Maven soll nicht gut darin sein, feine granulare Aufgaben zu erledigen, es ist keine Skriptsprache wie Bash oder Ant, es ist eher deklarativ - Sie sagen - ich brauche einen Krieg oder ein Ohr, und Sie verstehen es. Wenn Sie jedoch anpassen müssen, wie der Krieg oder das Ohr im Inneren aussehen sollen, haben Sie ein Problem. Es ist einfach nicht prozedural wie Ameise, sondern deklarativ. Dies hat am Anfang einige Vorteile und könnte am Ende viele Nachteile haben.
Ich denke, das ursprüngliche Konzept bestand darin, feine Plugins zu haben, die "einfach funktionieren", aber die Realität sieht anders aus, wenn Sie nicht standardmäßige Dinge tun.
Wenn Sie jedoch genügend Aufwand in Ihre Poms und einige benutzerdefinierte Plugins investieren, erhalten Sie eine viel bessere Build-Umgebung als beispielsweise bei ant (hängt natürlich von Ihrem Projekt ab, wird jedoch bei größeren Projekten immer wahrer).
quelle
Ich habe sehr gute Erfahrungen mit Copy-Maven-Plugin gemacht . Es hat eine viel bequemere und präzisere Syntax im Vergleich zum Maven-Resources-Plugin.
quelle
Eine generische Methode zum Kopieren beliebiger Dateien ist die Verwendung der Maven Wagon- Transportabstraktion. Es kann verschiedene Ziele behandeln über Protokolle wie
file
,HTTP
,FTP
,SCP
oderWebDAV
.Es gibt einige Plugins, die Funktionen zum Kopieren von Dateien mithilfe von verwenden
Wagon
. Am bemerkenswertesten sind:Out-of-the-Box Maven Deploy Plugin
Da ist das
deploy-file
Ziel. Es ist ziemlich unflexibel, kann aber die Arbeit erledigen:Ein wesentlicher Nachteil der Verwendung
Maven Deploy Plugin
besteht darin, dass sie für die Arbeit mit Maven-Repositorys vorgesehen ist. Es nimmt eine bestimmte Struktur und Metadaten an. Sie können sehen, dass die Datei unter platziert wirdfoo/bar/1.0/file-1.0.ext
und Prüfsummendateien erstellt werden. Daran führt kein Weg vorbei.Wagon Maven Plugin
Verwenden Sie das
upload-single
Ziel :Die Verwendung
Wagon Maven Plugin
zum Kopieren ist unkompliziert und scheint die vielseitigste zu sein.In den obigen Beispielen
<url>
kann jedes Protokoll unterstützt werden. Siehe die Liste der vorhandenen Wagenanbieter . Beispielsweisefile:///copy/to
SSH
:scp://host:22/copy/to
Die obigen Beispiele übergeben Plugin-Parameter in der Befehlszeile. Alternativ können Plugins direkt in konfiguriert werden
POM
. Dann wird der Aufruf einfach so seinmvn deploy:deploy-file@configured-execution-id
. Oder es kann an eine bestimmte Erstellungsphase gebunden sein.Bitte beachten Sie, dass Sie für Protokolle, die gerne
SCP
funktionieren, eine Erweiterung in Ihrem Verzeichnis definieren müssenPOM
:Wenn für das zu kopierende Ziel eine Authentifizierung erforderlich ist, können Anmeldeinformationen über die
Server
Einstellungen bereitgestellt werden .repositoryId
/serverId
an die Plugins übergeben muss mit dem in den Einstellungen definierten Server übereinstimmen.quelle
Ich kann nur davon ausgehen, dass Ihre Eigenschaft $ {project.server.config} benutzerdefiniert ist und außerhalb des Standardverzeichnislayouts liegt.
Wenn ja, dann würde ich die Kopieraufgabe verwenden.
quelle
Eine andere Möglichkeit besteht darin, diese Dinge mithilfe des Assembly-Plugins zu einem Artefakt zu bündeln. Anschließend können Sie das Abhängigkeits-Plugin verwenden, um diese Dateien an der gewünschten Stelle zu entpacken. Es gibt auch Kopierziele im Abhängigkeits-Plugin, um Artefakte zu kopieren.
quelle
Für diese Antwort konnte ich verschiedene Quellen zusammenstellen:
Von
~/.m2/settings.xml
:Führen Sie dann den folgenden Befehl aus: (-X dient zum Debuggen)
mvn -X upload:upload
quelle
Um einige der oben genannten guten Antworten zusammenzufassen: Maven wurde entwickelt, um Module zu erstellen und die Ergebnisse in ein Maven-Repository zu kopieren. Das Kopieren von Modulen in ein Deployment- / Installer-Input-Verzeichnis muss außerhalb des Kontexts der Kernfunktionalität von Maven erfolgen, z. B. mit dem Befehl Ant / Maven copy .
quelle