Heim > Java > javaLernprogramm > JeKa: Der einfachste Weg, Uber- und Shade-Gläser herzustellen

JeKa: Der einfachste Weg, Uber- und Shade-Gläser herzustellen

Barbara Streisand
Freigeben: 2025-01-04 09:37:35
Original
604 Leute haben es durchsucht

JeKa: The Simplest Way to Create Uber and Shade Jars

JeKa ist ein modernes Java-Build-Tool, das auf Einfachheit ausgerichtet ist.

Dieser Beitrag ist Teil der Serie „Jeka: der einfachste Weg zu...“ und zeigt, wie man mühelos ein fettes Glas (schattiert oder nicht) herstellt.

Für Anwendungen: Einfaches Fettglas

Eine gängige Methode zum Verpacken von Java-Anwendungen ist die Erstellung von FAT-JARs. Ein Fat Jar bündelt alle Klassen aus den Abhängigkeiten, sodass Sie nur das Jar (zusammen mit der Java Runtime) benötigen, um die Anwendung auszuführen.

Ihre Anwendung benötigt möglicherweise Abhängigkeiten, die Sie in der Datei dependencies.txt auflisten können, wie im folgenden Beispiel gezeigt:

== COMPILE ==
com.github.lalyos:jfiglet:0.0.9
com.google.guava:guava:33.4.0-jre
com.fasterxml.jackson.core:jackson-core:2.18.2


== TEST ==
org.junit.jupiter:junit-jupiter:5.8.1
Nach dem Login kopieren

Um die Fat-Jar-Generierung zu konfigurieren, bearbeiten Sie die Datei jeka.properties:

jeka.version=0.11.11
jeka.java.version=17

@project.pack.detectMainClass=true
@project.pack.jarType=FAT
Nach dem Login kopieren

Die Eigenschaft @project.pack.jarType gibt den Typ des zu generierenden JAR an. Es kann REGULAR, FAT oder SHADE sein.

Die Einstellung @project.pack.detectMainClass=true weist Jeka an, die Hauptklasse zu erkennen, die in die Manifestdatei aufgenommen werden soll.

Um das JAR zu generieren, führen Sie den folgenden Befehl aus:

jeka project: pack
Nach dem Login kopieren

Das FAT-JAR wird im Verzeichnis jeka-output erstellt. Um es auszuführen, führen Sie einfach Folgendes aus: java -jar [jar-name].jar.

Für Bibliotheken: Shade Fat-Glas

Für Bibliotheken besteht eine gute Vorgehensweise darin, ein normales Jar aufzubewahren und als zusätzliche Option ein Fat Jar bereitzustellen.

Idealerweise sollten Abhängigkeitsklassen auch in ein bestimmtes Paket verschoben werden, um Klassenpfadkonflikte für die Verbraucher zu vermeiden. Wir nennen ein Shade-Jar, ein Fat-Jar, in dem die Abhängigkeitsklassen in einem bestimmten Paket neu platziert wurden.

Um ein solches Glas zu erstellen, konfigurieren Sie JeKa wie folgt:

jeka.version=0.11.11
jeka.java.version=17

@project.moduleId=org.examples:my-lib
@project.version=1.0.0-SNAPSHOT
@project.pack.shadeJarClassifier=all

@maven.publication.extraArtifacts=all
Nach dem Login kopieren

Wenn Sie nun jeka prpject: pack aufrufen, wird auch eine *org.examples.my-lib-all.jar*-Datei erstellt.
Durch Öffnen der Jat-Datei können wir sehen, dass alle Abhängigkeitsklassen automatisch neu lokalisiert wurden.

.
├── org                  
│   └── example             
│       └── mylib           <- Base package for my-lib classes
│           ├── MyLyb.class   
│           └── _shaded     <- Base package for dependency classes
│               ├── com.google...
│               ├── com.fasterxml.jackson...
│               └── com.github.lalyos.jfiglat...
└── META-INF             
    └── MANIFEST.MF      

Nach dem Login kopieren

Zusätzlich enthält @maven.publication.extraArtifacts=all das Schattenglas in der Maven-Publikation, die von jeka maven: Publish-Befehl generiert wurde.

Maven-Vergleich

Wie unten gezeigt, erfordert Maven deutlich mehr Tipparbeit, um ein ähnliches Ziel zu erreichen.

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>


    <groupId>org.examples</groupId>
    <artifactId>my-lib</artifactId>
    <version>0.1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.github.lalyos</groupId>
            <artifactId>jfiglet</artifactId>
            <version>0.0.9</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>33.2.1-jre</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.17.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <!-- Run shade goal on package phase -->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>2.1</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <minimizeJar>true</minimizeJar>
                        <artifactSet>
                            <includes>
                                <include>com.google.guava:guava</include>
                                <include>com.github.lalyos:jfiglet</include>
                                <include>com.fasterxml.jackson.core:jackson-core</include>
                            </includes>
                        </artifactSet>
                        <relocations>
                            <relocation>
                                <pattern>com.google.common</pattern>
                                <shadedPattern>org.elasticsearch.common</shadedPattern>
                            </relocation>
                            <relocation>
                                <pattern>com.fasterxml.jackson</pattern>
                                <shadedPattern>org.elasticsearch.common.jackson</shadedPattern>
                            </relocation>
                        </relocations>
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/license/**</exclude>
                                    <exclude>META-INF/*</exclude>
                                    <exclude>META-INF/maven/**</exclude>
                                    <exclude>LICENSE</exclude>
                                    <exclude>NOTICE</exclude>
                                    <exclude>/*.txt</exclude>
                                    <exclude>build.properties</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>
Nach dem Login kopieren

Abschluss

Jeka macht das Erstellen von Java-Projekten erheblich einfacher, mit minimaler Konfiguration im Vergleich zu Maven oder Gradle.

Entdecken Sie weitere Beispiele, um herauszufinden, wie sich Jeka an die Anforderungen Ihres Projekts anpassen kann!

Das obige ist der detaillierte Inhalt vonJeKa: Der einfachste Weg, Uber- und Shade-Gläser herzustellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage