Creating a Fat Jar in Gradle
1.概述
在这篇快速文章中,我们将介绍在Gradle中创建"胖罐"。
基本上,胖子jar(也称为uber-jar)是一种自给自足的存档,其中包含运行应用程序所需的类和依赖项。
2.初始设置
让我们从一个具有两个依赖关系的Java项目的简单build.gradle文件开始:
1 2 3 4 5 6 7 8 9 10 | apply plugin: 'java' repositories { mavenCentral() } dependencies { compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25' compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25' } |
3.通过Java插件使用Jar任务
让我们从修改Java Gradle插件的jar任务开始。默认情况下,此任务会生成没有任何依赖关系的jar。
我们可以通过添加几行代码来覆盖此行为。我们需要使它起作用的两件事:
清单文件中的Main-Class属性
包括依赖罐
让我们对Gradle任务进行一些修改:
1 2 3 4 5 6 7 8 9 | jar { manifest { attributes"Main-Class":"com.baeldung.fatjar.Application" } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } |
4.创建一个单独的任务
如果我们想保留原始的jar任务,则可以创建一个单独的jar任务来完成相同的工作。
以下代码将添加一个名为customFatJar的新任务:
1 2 3 4 5 6 7 8 | task customFatJar(type: Jar) { manifest { attributes 'Main-Class': 'com.baeldung.fatjar.Application' } baseName = 'all-in-one-jar' from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } with jar } |
5.使用专用插件
我们也可以使用现有的Gradle插件来构建胖子。
在此示例中,我们将使用Shadow插件:
1 2 3 4 5 6 7 8 9 10 11 | buildscript { repositories { jcenter() } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1' } } apply plugin: 'java' apply plugin: 'com.github.johnrengelman.shadow' |
一旦应用了Shadow插件,即可使用shadowJar任务。
六,结论
在本教程中,我们介绍了在Gradle中创建胖罐的几种不同方法。我们覆盖了默认的jar任务,创建了一个单独的任务,并使用了影子插件。
建议使用哪种方法?答案是–这取决于。
在简单的项目中,只要覆盖默认的jar任务或创建一个新的jar任务就足够了。但是随着项目的发展,我们强烈建议使用插件,因为它们已经解决了更棘手的问题,例如与外部META-INF文件的冲突。
与往常一样,可以在GitHub上找到本教程的完整实现。