Groovy & Gradle: JVM Automation and Build Engineering · บทเรียน

คุณสมบัติและการกำหนดค่างาน

เรียนรู้การเพิ่มคุณสมบัติให้กับงานแบบกำหนดเอง กำหนดค่า และทำให้การสร้างแบบเพิ่มทีละน้อยทำงานได้อย่างถูกต้อง

บทเรียน 3 จาก 411 ขั้นตอน

คุณสมบัติและการกำหนดค่างาน เป็นบทเรียน Groovy & Gradle: JVM Automation and Build Engineering ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Groovy & Gradle: JVM Automation and Build Engineering และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Groovy & Gradle: JVM Automation and Build Engineering มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

What are Task Properties?

Custom Gradle tasks can be made highly flexible by adding properties. These properties act like variables that allow you to configure a task's behavior from your build.gradle script.

Using properties makes your custom tasks reusable and adaptable to different project needs without having to change their core logic.

Defining Simple Properties

To add a property to a custom task, you simply declare a public field within your task class. For basic types like String, int, or boolean, this is straightforward.

For more advanced scenarios, Gradle also offers dedicated Property types, but we'll start with simple declarations.

Custom Task with a Property

Here's a basic custom task defined directly in build.gradle. It has a message property that will be printed when the task runs. Notice the default value set for the property.

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction

class MyMessageTask extends DefaultTask {
    String message = "Default task message"

    @TaskAction
    void printMessage() {
        println "Task says: ${message}"
    }
}

task helloWorld(type: MyMessageTask)

Configuring Task Properties

Once a task property is defined, you can easily set its value from your build.gradle file. This is done within the task's configuration block, which allows you to customize the task instance.

Run the example to see how the default message is overridden.

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction

class MyMessageTask extends DefaultTask {
    String message = "Default task message"

    @TaskAction
    void printMessage() {
        println "Task says: ${message}"
    }
}

task helloWorld(type: MyMessageTask) {
    message = "Hello from CoddyKit!"
}

Inputs for Incremental Builds

One of Gradle's most powerful features is incremental builds. This means Gradle can skip tasks if their inputs and outputs haven't changed since the last build, saving a lot of time.

To enable this, you must tell Gradle which properties are considered task inputs. These are properties whose values influence the task's outcome.

Declaring Input Properties

You mark a property as an input using the @Input annotation. Gradle will then track its value. If the value changes between builds, the task will execute. If not, Gradle can mark it as UP-TO-DATE and skip it.

For file or directory inputs, use @InputFile, @InputDirectory, or @InputFiles.

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction

class MyInputTask extends DefaultTask {
    @Input
    String greeting = "Hola!"

    @TaskAction
    void greet() {
        println "Greeting: ${greeting}"
    }
}

task sayHello(type: MyInputTask) {
    greeting = "Bonjour!"
}

Outputs for Incremental Builds

Equally important are outputs. These are the files or directories that your task creates or modifies during its execution. Gradle also tracks these to determine if a task is up-to-date.

If a task's inputs haven't changed AND its declared outputs are present and valid, Gradle knows the task doesn't need to run again.

Declaring Output Properties

You use annotations like @OutputFile for a single result file or @OutputDirectory for a directory containing results. These tell Gradle where the task's generated artifacts will be stored.

The task will ensure the parent directory exists before writing the file.

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction

class MyOutputFileTask extends DefaultTask {
    @Input
    String content = "Default report content."

    @OutputFile
    File outputFile = project.file("build/reports/output.txt")

    @TaskAction
    void generateFile() {
        outputFile.parentFile.mkdirs()
        outputFile.write(content)
        println "Generated: ${outputFile.name}"
    }
}

task generateReport(type: MyOutputFileTask) {
    content = "Report data for: " + new Date().format("yyyy-MM-dd HH:mm:ss")
}

The Power of Incremental Builds

By correctly declaring both inputs and outputs, you unlock Gradle's powerful incremental build feature. This means your tasks only run when necessary, drastically speeding up build times.

This optimization is crucial for efficient development workflows and robust CI/CD pipelines, ensuring quick feedback and resource savings.

Quick Check on Properties

Imagine you have a custom Gradle task that takes a specific configuration file as an input. Which annotation would you use for the property that defines the path to this single configuration file?

Recap: Task Properties & Incremental Builds

In this lesson, you learned how to add properties to custom tasks, making them configurable and reusable. You also discovered how to mark properties as inputs (e.g., @Input, @InputFile) and outputs (e.g., @OutputFile, @OutputDirectory).

These annotations are key to enabling Gradle's powerful incremental build feature, which significantly speeds up your builds by skipping tasks that are already up-to-date. Keep practicing to master efficient task configuration!

เริ่มต้นได้ฟรี

เรียนรู้ Groovy ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
12
บทเรียน
48

คำถามที่พบบ่อย

บทเรียน “คุณสมบัติและการกำหนดค่างาน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คุณสมบัติและการกำหนดค่างาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Groovy & Gradle: JVM Automation and Build Engineering ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Groovy & Gradle: JVM Automation and Build Engineering มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คุณสมบัติและการกำหนดค่างาน”

เรียนรู้การเพิ่มคุณสมบัติให้กับงานแบบกำหนดเอง กำหนดค่า และทำให้การสร้างแบบเพิ่มทีละน้อยทำงานได้อย่างถูกต้อง คุณปฏิบัติ Groovy & Gradle: JVM Automation and Build Engineering ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Groovy & Gradle: JVM Automation and Build Engineering หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Groovy & Gradle: JVM Automation and Build Engineering บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “คุณสมบัติและการกำหนดค่างาน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Groovy & Gradle: JVM Automation and Build Engineering นี้ได้ไหม

ได้ บทเรียน Groovy & Gradle: JVM Automation and Build Engineering ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การกำหนดงานแบบกำหนดเอง
  2. ชนิดงานและการดำเนินการ
  3. คุณสมบัติและการกำหนดค่างาน
  4. งานแบบเพิ่มทีละน้อยและการตรวจสอบความเป็นปัจจุบัน
← กลับไปที่ Groovy & Gradle: JVM Automation and Build Engineering