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 では、同様の目的を達成するために大幅に多くの入力が必要です。
<?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 により、Maven や Gradle と比較して、最小限の構成で Java プロジェクトの構築が大幅に容易になります。
さらに多くの例を調べて、Jeka がプロジェクトのニーズにどのように適応できるかを発見してください!
以上がJeKa: Uber と Shade Jar を作成する最も簡単な方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。