Gradle Shadow插件与Java 17
简介
Gradle Shadow插件是一个常用的Gradle构建工具插件,用于将所有项目依赖打包到一个可执行的JAR文件中。它可以解决构建过程中的依赖冲突问题,并使生成的JAR文件更加便携和独立。而Java 17是最新的Java版本,带来了许多新特性和改进。本文将介绍如何在Gradle项目中使用Shadow插件,并结合Java 17进行构建和打包。
安装Gradle
首先,确保已经安装了Gradle。可以在命令行输入以下命令来检查Gradle的版本:
gradle --version
如果没有安装Gradle,可以在[Gradle官网](
Gradle Shadow插件
Gradle Shadow插件可以通过在build.gradle文件中添加相应的配置来使用。首先,需要在plugins
部分添加id 'com.github.johnrengelman.shadow' version '7.1.0'
,如下所示:
plugins {
id 'java'
id 'com.github.johnrengelman.shadow' version '7.1.0'
}
接下来,在shadowJar
部分可以进行更多的配置。例如,可以设置生成的JAR文件的名称:
shadowJar {
archiveFileName = 'myapp.jar'
}
可以设置主类,指定程序入口:
shadowJar {
mainClassName = 'com.example.MyApp'
}
还可以排除一些不需要打包的依赖:
shadowJar {
exclude 'javax.servlet:javax.servlet-api'
}
更多配置选项可以在[Gradle Shadow插件官方文档](
使用Java 17
Java 17引入了许多新特性,如Sealed类、Pattern匹配、Switch表达式的增强等。在使用Gradle构建Java项目时,我们可以指定使用Java 17来编译和运行代码。
首先,在项目的build.gradle
中添加以下配置:
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
这样Gradle就会使用Java 17来编译项目。接下来,可以在tasks
部分添加一个运行项目的任务:
task run(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'com.example.MyApp'
}
这个任务将使用Java 17运行com.example.MyApp
类。可以使用以下命令运行项目:
gradle run
示例项目
下面我们来创建一个简单的Java项目,并使用Gradle Shadow插件和Java 17进行构建和打包。
首先,创建一个名为myapp
的文件夹,并在其中创建以下文件结构:
myapp
├── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── example
│ │ └── MyApp.java
│ └── test
│ └── java
│ └── com
│ └── example
│ └── MyAppTest.java
└── build.gradle
在MyApp.java
中编写一个简单的Java类:
package com.example;
public class MyApp {
public static void main(String[] args) {
System.out.println("Hello, Gradle Shadow!");
}
}
在MyAppTest.java
中编写一个简单的测试类:
package com.example;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class MyAppTest {
@Test
public void test() {
assertEquals(2, 1 + 1);
}
}
接下来,打开build.gradle
文件,并添加以下配置:
plugins {
id 'java'
id 'com.github.johnrengelman.shadow' version '7.1.0'
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
sourceSets {
test {
java {
srcDirs = ["src/test/java"]
}
}
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.