Java: Wie erstelle ich eigenständige Distributionen von Maven-basierten Projekten?

8

Ich stoße oft auf Distributionen von Java-Anwendungen oder Bibliotheken, die Verwenden Sie Maven als ihr Build-Tool.

Einige von ihnen stellen leider keine eigenständigen (oder weitervertreibbaren) Jars zur Verfügung.

Ist es möglich, auf Maven basierende Anwendungen so zu bauen, dass Das Build-Ergebnis enthält alle Abhängigkeiten und kann so umverteilt werden, dass es out-of-the-box funktioniert.

Ich habe versucht, Jackrabbit OCM-Modul zu bauen. Aus einigen sehr "intelligenten" Gründen gibt es kein herunterladbares Standalone Version.
Also habe ich Jackrabbit mit Maven gebaut (das Quellpaket von Jackrabbit beinhaltet OCM), und bekam das gleiche Glas wie in der Apache-Repository . Das Jar enthält nicht notwendige Abhängigkeiten und ist nutzlos für mich.

    
ivan_ivanovich_ivanoff 18.06.2009, 22:25
quelle

6 Antworten

3

Benutze das Maven Shade Plugin

... aber seid vorsichtig mit den gotchas (ähnlich dem weiter unten in meiner Antwort beschriebenen), das Eine Workaround, die hier erklärt wird .

Seien Sie auch sehr vorsichtig mit der Shade-Plugin-Konfiguration. Ich habe versehentlich doppelte <configuration> -Tags verwendet, und die Transformatoren galten überhaupt nicht, und das Plugin erlaubte mir auch, mich nicht zu warnen.

Verwenden Sie nicht das Maven Assembly Plugin

assembly:single entpackt Ihre Abhängigkeits-JARs, und das könnte nicht das sein, was Sie wollen. Z.B. Sachen wie META-INF/spring.schemas werden mit der letzten Spring-Abhängigkeits-JAR überschrieben, die ausgewertet wird, und als solche werden Ihre XSDs nicht gefunden (abgesehen von denen in der letzten JAR, natürlich). Aus diesem Grund haben Systeme wie Alfresco ihr AMP-Plugin entwickelt, das Abhängigkeiten innerhalb von lib/ in dem von Ihnen erstellten AMP bündelt. Letzteres wirft jedoch Probleme mit der Abhängigkeitsverwaltung auf.

    
opyate 10.08.2012 12:05
quelle
2

Vielleicht haben Sie etwas Glück mit dem Appassembler-Plugin . Sollte dies nicht der Fall sein, sehen Sie sich das Assembly-Plug-In an. Das ist flexibler, aber niedriger. Wenn Sie das Assembly-Plug-in verwenden, finden Sie möglicherweise das Kapitel dazu in maven: der definitive Leitfaden um nützlich zu sein.

    
Dominic Mitchell 19.06.2009 00:16
quelle
2

Wie Dominic gesagt hat, wird die Verwendung des Assembly-Plugins den Zweck erfüllen. Sie würden es normalerweise im POM Ihres eigenen Projekts konfigurieren, um alle erforderlichen Abhängigkeiten zu sammeln und zu verpacken:

%Vor%

jar-with-dependencies ist vom Assembly-Plugin vordefiniert und enthält alle Abhängigkeiten im endgültigen Paket (siehe Dokumentation hier ).

Wenn Sie Maven nicht für Ihr eigenes Projekt verwenden möchten, müssen Sie die POMs der Bibliotheken ändern und sie neu packen (laden Sie die Quellen herunter, fügen Sie das obige Snippet zu pom.xml hinzu und führen Sie mvn package aus). Vorsicht vor doppelten oder inkompatiblen transitiven Abhängigkeiten, wenn Sie mehrere Bibliotheken verwenden. exclusions könnte in diesem Fall helfen (siehe hier ) ).

    
Nils Wloka 19.06.2009 22:06
quelle
0

Ändern Sie die Datei pom.xml und verwenden Sie die Direktive <Embed-Dependency> . Ein ähnliches Beispiel finden Sie hier , damit Sie es tun können Passen Sie es Ihrem Szenario an.

%Vor%

Ich denke, das sollte den Trick machen.

Hier ist das Beispiel unter der obigen URL, das anscheinend Timeout gibt.

%Vor%     
Jorge Ferreira 18.06.2009 22:34
quelle
0

Ich glaube, dass das Maven Shade Plugin Ihren Bedürfnissen entspricht. Ich benutze es, wenn ich Kommandozeilen-Interface-Tools erstelle, um ein Uber-JAR einschließlich meiner Klassen und zusammen mit den Klassen aus all meinen Abhängigkeiten zu erstellen.

Es ist sehr einfach zu bedienen und ich denke, dies ist Beispiel selbsterklärend.

    
Brian Matthews 19.06.2009 19:54
quelle
0

Wie einige der Poster sagten, ist das Assembly-Plugin eine gute Möglichkeit, eine vollständige JAR-Datei mit allen Projektabhängigkeiten zu erstellen. Sie müssen die Datei pom.xml jedoch nicht wirklich ändern. Einfach ausführen:

%Vor%

... um eine JAR-Datei zu erstellen. Wenn Sie etwas weiter fortgeschrittenes tun möchten, sollten Sie wahrscheinlich pom.xml ändern und einen benutzerdefinierten Assembly-Deskriptor erstellen.

    
reidarok 29.07.2009 06:57
quelle