Appearance
构建 Java 控制台应用
本示例演示如何从零开始用 Gradle 构建一个完整的 Java 控制台应用程序。
项目初始化
bash
mkdir java-console-app
cd java-console-app
gradle init \
--type java-application \
--dsl kotlin \
--test-framework junit-jupiter \
--package com.example \
--project-name java-console-app \
--no-incubating项目结构
java-console-app/
├── app/
│ ├── build.gradle.kts
│ └── src/
│ ├── main/java/com/example/
│ │ └── App.java
│ └── test/java/com/example/
│ └── AppTest.java
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/...
├── settings.gradle.kts
├── gradlew
└── gradlew.batsettings.gradle.kts
kotlin
rootProject.name = "java-console-app"
include("app")gradle/libs.versions.toml
toml
[versions]
guava = "32.0.1-jre"
junit-jupiter = "5.10.1"
[libraries]
guava = { module = "com.google.guava:guava", version.ref = "guava" }
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" }
junit-launcher = { module = "org.junit.platform:junit-platform-launcher" }
[plugins]app/build.gradle.kts
kotlin
plugins {
application
}
group = "com.example"
version = "1.0.0"
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral()
}
application {
mainClass.set("com.example.App")
}
dependencies {
implementation(libs.guava)
testImplementation(libs.junit.jupiter)
testRuntimeOnly(libs.junit.launcher)
}
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
}
tasks.named<Test>("test") {
useJUnitPlatform()
testLogging {
events("passed", "skipped", "failed")
}
}源码示例
java
// src/main/java/com/example/App.java
package com.example;
import com.google.common.collect.ImmutableList;
public class App {
private final String message;
public App(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public static void main(String[] args) {
App app = new App("Hello, Gradle!");
System.out.println(app.getMessage());
ImmutableList<String> items = ImmutableList.of("one", "two", "three");
items.forEach(System.out::println);
}
}java
// src/test/java/com/example/AppTest.java
package com.example;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class AppTest {
@Test
void getMessage_returnsCorrectMessage() {
App app = new App("Hello");
assertEquals("Hello", app.getMessage());
}
@Test
void getMessage_notEmpty() {
App app = new App("Test");
assertFalse(app.getMessage().isEmpty());
}
}构建与运行
bash
# 运行
./gradlew run
# 测试
./gradlew test
# 打包
./gradlew jar
java -jar app/build/libs/app-1.0.0.jar
# 生成发行版(带启动脚本)
./gradlew installDist
./app/build/install/app/bin/app增量构建验证
bash
# 第一次构建
./gradlew build
# 8 actionable tasks: 8 executed
# 不修改任何文件,再次构建
./gradlew build
# 8 actionable tasks: 8 up-to-date ← 全部跳过!
# 修改 App.java 后
./gradlew build
# 8 actionable tasks: 4 executed, 4 up-to-date