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 การปิดงานเหล่านั้นซึ่งดำเนินการจริง