ホームページ > Java > &#&チュートリアル > JeKa: Uber と Shade Jar を作成する最も簡単な方法

JeKa: Uber と Shade Jar を作成する最も簡単な方法

Barbara Streisand
リリース: 2025-01-04 09:37:35
オリジナル
617 人が閲覧しました

JeKa: The Simplest Way to Create Uber and Shade Jars

JeKa は、シンプルさを重視した最新の Java ビルド ツールです。

この投稿は 「Jeka: the simplest way to...」 シリーズの一部であり、(影付きかどうかに関係なく) 太い瓶を簡単に作成する方法を示しています。

用途 : シンプルなファットジャー

Java アプリケーションをパッケージ化する一般的な方法は、FAT jar を作成することです。 fat jar は依存関係のすべてのクラスをバンドルするため、アプリケーションを実行するために必要なのは jar (Java ランタイムとともに) だけです。

アプリケーションには依存関係が必要な場合があります。依存関係は、以下の例に示すように dependency.txt ファイルにリストできます。

== 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
ログイン後にコピー

Fat jar の生成を構成するには、jeka.properties ファイルを編集します。

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

@project.pack.detectMainClass=true
@project.pack.jarType=FAT
ログイン後にコピー

@project.pack.jarType プロパティは、生成する JAR のタイプを指定します。レギュラー、ファット、シェードのいずれかになります。

@project.pack.detectMainClass=true 設定は、マニフェスト ファイルに含めるメイン クラスを検出するように Jeka に指示します。

jar を生成するには、次のコマンドを実行します:

jeka project: pack
ログイン後にコピー

FAT jar は jeka-output ディレクトリに作成されます。実行するには、java -jar [jar-name].jar.

を実行するだけです。

図書館用 : シェードファットジャー

ライブラリの場合、通常の Jar を保持し、追加オプションとして Fat Jar を提供することが推奨されます。

理想的には、コンシューマのクラスパスの競合を避けるために、依存関係クラスも特定のパッケージに再配置する必要があります。依存関係クラスが特定のパッケージ内に再配置されたものを、shade jar、fat jar と呼びます。

このような jar を作成するには、次のように JeKa を構成します。

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
ログイン後にコピー

ここで、jeka prpject: Pack を呼び出すと、*org.examples.my-lib-all.jar* ファイルも作成されます。
jat ファイルを開くと、すべての依存関係クラスが自動的に再配置されたことがわかります。

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

ログイン後にコピー

さらに、@maven.publication.extraArtifacts=all には、jeka maven: public コマンドによって生成された maven パブリケーション内のシェード jar が含まれています。

Maven の比較

以下に示すように、Maven では、同様の目的を達成するために大幅に多くの入力が必要です。

<?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>
ログイン後にコピー

結論

Jeka により、MavenGradle と比較して、最小限の構成で Java プロジェクトの構築が大幅に容易になります。

さらに多くの例を調べて、Jeka がプロジェクトのニーズにどのように適応できるかを発見してください!

以上がJeKa: Uber と Shade Jar を作成する最も簡単な方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート