Tool zum Generieren einer JAR-Datei mit anderen JAR-Dateien?

Ich suche einen JAR-Dateigenerator, der diese Anforderungen erfüllt:

  • Kann JAR-Dateien erstellen, die andere JAR-Dateien enthalten
  • Vereinfacht die Erstellung und Pflege von Manifestdateien.
Von welchen Komplexitäten sprechen wir? Alle meine .jarDateien (und ihre Manifeste) werden automatisch von Apache Maven als Teil des Erstellungsprozesses erstellt.
PKZIP? (Oder Info-ZIP…)
@Darth Android Eigentlich bin ich in einer Position, in der ich ziemlich oft Ant für meine Projekte verwenden muss
@demongolem: Welche Art von Glas versuchst du genau zu erstellen? Listen Sie alle "Schwierigkeiten" auf.
@Nicolas Raoul Zum einen Classpath-Probleme beim Verpacken von Jar in meinem Jar. Dieser Anwendungsfall an sich wird die meiste Zeit verstümmelt.

Antworten (3)

Zum Erstellen von Fat Jars ist Jarjar ein brillantes Tool, da es einfach zu bedienen, gut gepflegt ist und eine gute Plugin-Unterstützung bietet. Es wird auch von vielen Bibliotheken empfohlen, die normalerweise neu gepackt werden müssen , wie z. B. ASM . Ansonsten sollten Ihnen Build-Manager wie Maven oder Gradle die gewünschte Funktionalität out of the box bieten. Sie sollten in der Lage sein, Ressourcen in Abhängigkeit von Build-Profilen zu packen.

Wenn Sie Ihre Anwendung zusammen mit ihren Bibliotheks-JARs als eine JAR-Datei packen möchten, sollten Sie das BSD-lizenzierte One-Jar in Betracht ziehen . One-Jar verwendet einen benutzerdefinierten Classloader zum Laden von JARs in Ihrer Haupt-JAR-Datei, während Jarjar (basierend auf seiner Dokumentation) alle Ihre Klassen in nur einer JAR-Datei (keine inneren JARs) zusammenfasst und die Klassendateien nach Bedarf ändert.

Abhängig von Ihrer Anwendung kann der Ansatz von One-Jar besser (oder schlechter) funktionieren als der von Jarjar.

Ich denke, Maven ist das Werkzeug, das alles kann (mit einer gewissen Konfiguration).

Beispiel: Ich habe einen Ordner (./lib), in dem ich alle meine JAR-Dateien habe, ich habe nur die folgende kleine pom.xml-Datei wie diese:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.mycompany.test</groupId>
    <artifactId>bigjar</artifactId>
    <packaging>jar</packaging>

    <version>1.0-SNAPSHOT</version>

    <url>http://www.mycompany.com</url>

    <prerequisites>
        <maven>3.1.0</maven>
    </prerequisites>

    <!-- Put external dependencies here -->
    <dependencies>

    </dependencies>

    <build>
        <defaultGoal>install</defaultGoal>
        <resources>
            <resource>
                <directory>lib</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>  

Führen Sie einfach aus mvn clean install, und dann haben Sie alle Ihre lib/*.jar-Dateien in einem neuen JAR.

Wenn Sie externe Jars benötigen, können Sie diese einfach als neue Abhängigkeit hinzufügen (im Abschnitt).

Möchten Sie die Manifest.MF verwalten, schauen Sie einfach in diesen Artikel , dort wird erklärt, wie man die .MF verwendet maven-jar-plugin. Offizielle Dokumentation hier .