Gradle - งาน
Gradle build script อธิบายเกี่ยวกับโปรเจ็กต์อย่างน้อยหนึ่งโปรเจ็กต์ แต่ละโครงการประกอบด้วยงานที่แตกต่างกัน งานคือชิ้นงานที่บิวด์ดำเนินการ งานอาจรวบรวมคลาสบางคลาสจัดเก็บไฟล์คลาสไว้ในโฟลเดอร์เป้าหมายแยกต่างหากสร้าง JAR สร้าง Javadoc หรือเผยแพร่ความสำเร็จบางอย่างไปยังที่เก็บ
บทนี้จะอธิบายเกี่ยวกับงานคืออะไรและวิธีสร้างและดำเนินการงาน
การกำหนดงาน
Task คือคีย์เวิร์ดที่ใช้กำหนดงานลงในบิลด์สคริปต์ ดูตัวอย่างต่อไปนี้ซึ่งแสดงถึงงานที่ชื่อhello ที่พิมพ์ tutorialspoint. คัดลอกและบันทึกสคริปต์ต่อไปนี้ลงในไฟล์ชื่อbuild.gradle. สร้างสคริปต์นี้กำหนดชื่องาน hello ซึ่งใช้ในการพิมพ์สตริงบทช่วยสอน
task hello {
doLast {
println 'tutorialspoint'
}
}
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง เรียกใช้สคริปต์ข้างต้น คุณควรดำเนินการในตำแหน่งที่เก็บไฟล์ build.gradle
C:\> gradle –q hello
เอาท์พุต:
tutorialspoint
คุณสามารถลดความซับซ้อนของงาน hello นี้ได้โดยระบุช็อตคัท (แสดงถึงสัญลักษณ์ <<) ไปยังไฟล์ doLastคำให้การ. หากคุณเพิ่มทางลัดนี้ในงานด้านบนhello จะมีลักษณะเหมือนสคริปต์ต่อไปนี้
task hello << {
println 'tutorialspoint'
}
คุณสามารถเรียกใช้สคริปต์ด้านบนโดยใช้ไฟล์ gradle –q hello คำสั่ง
นี่คือรูปแบบบางส่วนในการกำหนดงานลองดูที่มัน ตัวอย่างต่อไปนี้กำหนดงานhello.
คัดลอกและบันทึกรหัสต่อไปนี้ลงใน build.gradle ไฟล์.
task (hello) << {
println "tutorialspoint"
}
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง มันรันสคริปต์ที่กำหนดข้างต้น คุณควรดำเนินการนี้โดยที่ไฟล์ build.gradle เก็บไว้
C:\> gradle –q hello
เอาท์พุต:
tutorialspoint
คุณยังสามารถใช้สตริงสำหรับชื่องาน ลองดูตัวอย่างสวัสดีเดียวกัน ที่นี่เราจะใช้ String เป็นงาน
คัดลอกและบันทึกรหัสต่อไปนี้ลงใน build.gradle ไฟล์.
task('hello') << {
println "tutorialspoint"
}
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง มันรันสคริปต์ที่กำหนดข้างต้น คุณควรดำเนินการนี้โดยที่ไฟล์ build.gradle เก็บไว้
C:\> gradle –q hello
เอาท์พุต:
tutorialspoint
คุณยังสามารถใช้ไวยากรณ์ทางเลือกในการกำหนดงาน นั่นคือการใช้เมธอด create () เพื่อกำหนดงาน ลองดูตัวอย่างสวัสดีที่ให้ไว้ด้านล่าง
คัดลอกและบันทึกรหัสที่ระบุด้านล่างลงใน build.gradle ไฟล์.
tasks.create(name: 'hello') << {
println "tutorialspoint"
}
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง มันรันสคริปต์ที่กำหนดข้างต้น คุณควรดำเนินการนี้โดยที่ไฟล์ build.gradle เก็บไว้
C:\> gradle –q hello
เอาท์พุต:
tutorialspoint
การค้นหางาน
หากคุณต้องการค้นหางานที่คุณกำหนดไว้ในไฟล์บิลด์คุณต้องใช้คุณสมบัติโปรเจ็กต์มาตรฐานตามลำดับ นั่นหมายความว่าแต่ละงานพร้อมใช้งานเป็นคุณสมบัติของโปรเจ็กต์โดยใช้ชื่องานเป็นชื่อคุณสมบัติ
ดูรหัสต่อไปนี้ที่เข้าถึงงานเป็นคุณสมบัติ
คัดลอกและบันทึกรหัสที่ระบุด้านล่างลงใน build.gradle ไฟล์.
task hello
println hello.name
println project.hello.name
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง มันรันสคริปต์ที่กำหนดข้างต้น คุณควรดำเนินการนี้โดยที่ไฟล์ build.gradle เก็บไว้
C:\> gradle –q hello
เอาท์พุต:
hello
hello
คุณยังสามารถใช้คุณสมบัติทั้งหมดผ่านคอลเลกชันงาน
คัดลอกและบันทึกรหัสต่อไปนี้ลงใน build.gradle ไฟล์.
task hello
println tasks.hello.name
println tasks['hello'].name
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง มันรันสคริปต์ที่กำหนดข้างต้น คุณควรดำเนินการนี้โดยที่ไฟล์ build.gradle เก็บไว้
C:\> gradle –q hello
เอาท์พุต:
hello
hello
คุณยังสามารถเข้าถึงเส้นทางของงานโดยใช้งาน สำหรับสิ่งนี้คุณสามารถเรียกเมธอด getByPath () ด้วยชื่องานหรือพา ธ สัมพัทธ์หรือพา ธ สัมบูรณ์
คัดลอกและบันทึกรหัสที่ระบุด้านล่างลงใน build.gradle ไฟล์.
project(':projectA') {
task hello
}
task hello
println tasks.getByPath('hello').path
println tasks.getByPath(':hello').path
println tasks.getByPath('projectA:hello').path
println tasks.getByPath(':projectA:hello').path
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง มันรันสคริปต์ที่กำหนดข้างต้น คุณควรดำเนินการนี้โดยที่ไฟล์ build.gradle เก็บไว้
C:\> gradle –q hello
เอาท์พุต:
:hello
:hello
:projectA:hello
:projectA:hello
การเพิ่มการอ้างอิงให้กับงาน
คุณสามารถทำให้งานขึ้นอยู่กับงานอื่นซึ่งหมายความว่าเมื่องานหนึ่งเสร็จแล้วจะเริ่มงานอื่นเท่านั้น แต่ละงานมีความแตกต่างกันด้วยชื่องาน การรวบรวมชื่องานถูกอ้างถึงโดยคอลเล็กชันงาน ในการอ้างถึงงานในโปรเจ็กต์อื่นคุณควรใช้พา ธ ของโปรเจ็กต์เป็นคำนำหน้าชื่องานที่เกี่ยวข้อง
ตัวอย่างต่อไปนี้ซึ่งเพิ่มการอ้างอิงจาก taskX ไปยัง taskY
คัดลอกและบันทึกรหัสที่ระบุด้านล่างลงใน build.gradleไฟล์. ดูรหัสต่อไปนี้
task taskX << {
println 'taskX'
}
task taskY(dependsOn: 'taskX') << {
println "taskY"
}
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง มันรันสคริปต์ที่กำหนดข้างต้น คุณควรดำเนินการนี้โดยที่ไฟล์build.gradle ที่เก็บไฟล์
C:\> gradle –q taskY
เอาท์พุต:
taskX
taskY
ตัวอย่างข้างต้นกำลังเพิ่มการพึ่งพางานโดยใช้ชื่อ มีอีกวิธีหนึ่งในการบรรลุการพึ่งพางานนั่นคือกำหนดการพึ่งพาโดยใช้วัตถุงาน
ให้เราใช้ตัวอย่างเดียวกันของ taskY ที่ขึ้นอยู่กับ taskX แต่เราใช้อ็อบเจ็กต์งานแทนชื่อการอ้างอิงงาน
คัดลอกและบันทึกรหัสต่อไปนี้ลงใน build.gradle ไฟล์.
task taskY << {
println 'taskY'
}
task taskX << {
println 'taskX'
}
taskY.dependsOn taskX
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง คุณควรดำเนินการในตำแหน่งที่เก็บไฟล์ build.gradle
C:\> gradle –q taskY
เอาท์พุต:
taskX
taskY
ตัวอย่างข้างต้นกำลังเพิ่มการพึ่งพางานโดยใช้ชื่อ มีอีกวิธีหนึ่งในการบรรลุการพึ่งพางานนั่นคือกำหนดการพึ่งพาโดยใช้วัตถุงาน
ที่นี่เราใช้ตัวอย่างเดียวกันว่า taskY ขึ้นอยู่กับ taskX แต่เรากำลังใช้อ็อบเจ็กต์งานแทนชื่อการอ้างอิงงาน ลองดูมัน
คัดลอกและบันทึกรหัสที่ระบุด้านล่างลงใน build.gradleไฟล์. ดูรหัสต่อไปนี้
task taskX << {
println 'taskX'
}
taskX.dependsOn {
tasks.findAll {
task → task.name.startsWith('lib')
}
}
task lib1 << {
println 'lib1'
}
task lib2 << {
println 'lib2'
}
task notALib << {
println 'notALib'
}
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง มันรันสคริปต์ที่กำหนดข้างต้น คุณควรดำเนินการนี้โดยที่ไฟล์build.gradle ที่เก็บไฟล์
C:\> gradle –q taskX
เอาท์พุต:
lib1
lib2
taskX
การเพิ่มคำอธิบายในงาน
คุณสามารถเพิ่มคำอธิบายให้กับงานของคุณ คำอธิบายนี้จะแสดงขึ้นเมื่อดำเนินการGradle tasks. สามารถทำได้โดยใช้คำหลักคำอธิบาย
คัดลอกและบันทึกรหัสต่อไปนี้ลงใน build.gradleไฟล์. ดูรหัสต่อไปนี้
task copy(type: Copy) {
description 'Copies the resource directory to the target directory.'
from 'resources'
into 'target'
include('**/*.txt', '**/*.xml', '**/*.properties')
println("description applied")
}
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง คุณควรดำเนินการในตำแหน่งที่เก็บไฟล์ build.gradle
C:\> gradle –q copy
หากดำเนินการคำสั่งสำเร็จคุณจะได้รับผลลัพธ์ต่อไปนี้
description applied
การข้ามงาน
การข้ามงานทำได้โดยการปิดเพรดิเคต สิ่งนี้เป็นไปได้เฉพาะในกรณีที่วิธีการทำงานหรือการปิดการขว้างปาStopExecutionException ก่อนที่จะดำเนินการงานจริง
คัดลอกและบันทึกรหัสต่อไปนี้ลงใน build.gradle ไฟล์.
task eclipse << {
println 'Hello Eclipse'
}
// #1st approach - closure returning true, if the task should be executed, false if not.
eclipse.onlyIf {
project.hasProperty('usingEclipse')
}
// #2nd approach - alternatively throw an StopExecutionException() like this
eclipse.doFirst {
if(!usingEclipse) {
throw new StopExecutionException()
}
}
ดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง คุณควรดำเนินการในตำแหน่งที่เก็บไฟล์ build.gradle
C:\> gradle –q eclipse
โครงสร้างงาน
Gradle มีขั้นตอนที่แตกต่างกันเมื่อทำงานกับงาน ก่อนอื่นมีขั้นตอนการกำหนดค่าซึ่งมีการเรียกใช้รหัสซึ่งระบุโดยตรงในการปิดงาน บล็อกการกำหนดค่าจะดำเนินการสำหรับทุกงานที่มีและไม่เพียง แต่สำหรับงานเหล่านั้นซึ่งจะถูกเรียกใช้ในภายหลังเท่านั้น
หลังจากขั้นตอนการกำหนดค่าเฟสการดำเนินการจะรันโค้ดภายในไฟล์ doFirst หรือ doLast การปิดงานเหล่านั้นซึ่งดำเนินการจริง