2016-12-09 1 views
0

Ich habe das folgende Problem. Angenommen, ich habe ein Verzeichnis mit einer Reihe von externen Gläsern, die nicht unter meiner Aufsicht stehen. Diese Gläser werden im Verzeichnis lib gespeichertMaven importieren mehrere Gläser in eine Abhängigkeit

lib 
|_folder1 
| |_jar1.jar 
| |_jar2.jar 
|_folder2 
| |_jar3.jar 
|_jar4.jar 

Jetzt hat eine neue Version der Bibliothek jedes Mal freigegeben wird ich eine Kopie der lib-Ordner, die ich brauche in meine Anwendung zu integrieren.

Da es viele Gläser darin gibt und ich nicht jedes Mal, wenn ich ein neues Projekt starte oder die Version der Bibliothek ändert, eine Vielzahl von Gläsern integrieren möchte, dachte ich vielleicht, dass ich all diese Gläser in eine gehostete Bibliothek integrieren kann von meinem lokalen Maven-Repository.

Also ist die Idee, ein Skript zu haben, das im gesamten Verzeichnis sucht, nach allen JAR-Dateien sucht und sie in meinem lokalen Repository installiert. Hier

ist, was die erste Version des Skripts wie folgt aussieht:

SET @libPath="C:\path\to\lib" 
SET @groupId="group.id.custom.lib" 
SET @artifactId="custom-lib" 
SET @version="1.0" 
SET @packaging="jar" 
for /r %@libPath% %%i in (*.jar) do mvn install:install-file^
    -Dfile="%%i"^
    -DgroupId=%@groupId%^
    -DartifactId=%@artifactId%^
    -Dversion=%@version%^
    -Dpackaging=%@packaging% 

Die Idee wäre, nur zu haben, um die Abhängigkeit zu meiner pom.xml-Datei hinzufügen und mit ihm getan werden:

<dependency>   
     <groupId>group.id.custom.lib</groupId> 
     <artifactId>custom-lib</artifactId> 
     <version>[1.0,)</version> 
</dependency> 

Das Skript durchforstet alle Dateien, legt jedoch nur das gefundene jar in mein lokales Repository und überschreibt das zuvor installierte jar.

Die Frage wäre, ob es einen Weg gibt, dies mit Hilfe eines Skripts zu erreichen.

Grüße

[edit:] Nach den Kommentaren von Essex Boy ich mein Skript dazu angepasst haben:

SET @libPath="C:\path\to\lib" 
SET @groupId="group.id.custom.lib" 
SET @artifactId="custom-lib" 
SET @version="1.0" 
SET @packaging="jar" 
SET @tempDir="C:\Temp\temp-dir" 
SET @tempJar="temp.jar" 
if not exist %@tempDir% mkdir %@tempDir% 
cd %@tempDir% 
del *.* /f /q 
for /r %@magicDrawLib% %%i in (*.jar) do copy %%i %@tempDir% 
for /r %@tempDir% %%j in (*.jar) do jar -xvf %%j del %%j 
jar -cvf %@tempJar% * 
mvn install:install-file^
    -Dfile=%@tempJar%^
    -DgroupId=%@groupId%^
    -DartifactId=%@artifactId%^
    -Dversion=%@version%^
    -Dpackaging=%@packaging% 

Welche scheint zu funktionieren. Ich muss die resultierende Maven-Abhängigkeit testen, um sie zu verifizieren.

Antwort

1

Zuerst überschreibt ein bestehendes Glas mit einem anderen das Objekt der Verwendung von Maven. Alle Artefakte sollen unveränderlich sein (sich nie ändern). Wenn Sie ein neues jar haben, handelt es sich um eine neue Version, die Ihrem Repository als solches hinzugefügt werden sollte.

Ich denke, das Skript ist eine gute Idee.

Wenn mehr als eine Person dieses Repository teilt, dann würde ich Ihr eigenes gemeinsames Repository erstellen https://www.jfrog.com/open-source/ ist ein ausgezeichnetes freies.

+0

Vielen Dank für Ihre Antwort, natürlich ist es eine schlechte Idee, den vorhandenen Jar mit einem anderen zu überschreiben, das ist der Grund, warum das Skript nicht funktioniert (Es tut mir leid, wenn ich das nicht in der Anfangsbeitrag). Jedoch scheint mir diese Information nicht zu helfen, alle Gläser in eine Maven-Abhängigkeit zu kombinieren. – Scyla101

+0

Entschuldigen Sie, dass ich Ihre Frage missverstanden habe, warum ändern Sie nicht Ihr Skript, um jedes jar in ein temporäres Verzeichnis zu kopieren, explodieren Sie (jar xvf %% ii) löschen Sie es und erstellen danach ein neues jar (jar cvf temp.jar *) dann fügen Sie die Temp, Glas zu Ihrem Maven Repo. –

+0

Danke für die Antwort. Ich habe meine Frage mit einem Skript aktualisiert, das zu funktionieren scheint. Vielleicht können Sie Ihre Antwort aktualisieren, damit ich Ihnen einen angemessenen Kredit geben kann. – Scyla101

Verwandte Themen