Maison > Java > javaDidacticiel > JeKa : le moyen le plus simple de créer des pots Uber et Shade

JeKa : le moyen le plus simple de créer des pots Uber et Shade

Barbara Streisand
Libérer: 2025-01-04 09:37:35
original
597 Les gens l'ont consulté

JeKa: The Simplest Way to Create Uber and Shade Jars

JeKa est un outil de construction Java moderne axé sur la simplicité.

Cet article fait partie de la série "Jeka : la manière la plus simple de..." et montre comment créer un pot de graisse (ombré ou non) sans effort.

Pour les applications : Pot de graisse simple

Une méthode courante pour empaqueter des applications Java consiste à créer des fichiers FAT. Un gros pot regroupe toutes les classes des dépendances, vous n'avez donc besoin que du pot (avec le Java Runtime) pour exécuter l'application.

Votre application peut avoir besoin de dépendances, que vous pouvez lister dans le fichier dependencies.txt comme indiqué dans l'exemple ci-dessous :

== 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
Copier après la connexion

Pour configurer la génération du fat jar, éditez le fichier jeka.properties :

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

@project.pack.detectMainClass=true
@project.pack.jarType=FAT
Copier après la connexion

La propriété @project.pack.jarType spécifie le type de JAR à générer. Il peut être RÉGULIER, FAT ou SHADE.

Le paramètre @project.pack.detectMainClass=true demande à Jeka de détecter la classe principale à inclure dans le fichier manifeste.

Pour générer le jar, exécutez la commande suivante :

jeka project: pack
Copier après la connexion

Le pot FAT sera créé dans le répertoire jeka-output. Pour l'exécuter, exécutez simplement : java -jar [jar-name].jar.

Pour les bibliothèques : pot Shade Fat

Pour les bibliothèques, une bonne pratique consiste à conserver un Jar ordinaire et à prévoir un Fat Jar en option supplémentaire.

Idéalement, les classes de dépendance devraient également être déplacées vers un package spécifique pour éviter les conflits de chemin de classe pour les consommateurs. Nous appelons un pot shade, un pot fat où les classes de dépendances ont été relocalisées dans un package spécifique.

Pour créer un tel pot, configurez JeKa comme suit :

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
Copier après la connexion

Maintenant, invoquer jeka prpject: pack créera également un fichier*org.examples.my-lib-all.jar*.
En ouvrant le fichier jat, nous pouvons voir que toutes les classes de dépendances ont été automatiquement relocalisées.

.
├── 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      

Copier après la connexion

De plus, @maven.publication.extraArtifacts=all inclut le pot de nuances dans la publication maven générée par jeka maven : commande de publication.

Comparaison Maven

Comme indiqué ci-dessous, Maven nécessite beaucoup plus de frappe pour atteindre un objectif similaire.

<?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>
Copier après la connexion

Conclusion

Jeka facilite considérablement la création de projets Java, avec une configuration minimale par rapport à Maven ou Gradle.

Explorez d'autres exemples pour découvrir comment Jeka peut s'adapter aux besoins de votre projet !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal