gradle build มีสามไฟล์
build.gradle
ที่กำหนดสคริปต์คอนฟิกูเรชันบิลด์gradle.properties
settings.gradle
คำถาม
- อะไรคือความแตกต่างระหว่าง
settings.gradle
&gradle.properties
? - ควรใส่การตั้งค่า
settings.gradle
เมื่อgradle.properties
ใดเทียบกับ ?
gradle build มีสามไฟล์
build.gradle
ที่กำหนดสคริปต์คอนฟิกูเรชันบิลด์gradle.properties
settings.gradle
คำถาม
settings.gradle
& gradle.properties
?settings.gradle
เมื่อgradle.properties
ใดเทียบกับ
?คำตอบ:
settings.gradle
settings.gradle
ไฟล์เป็นสคริปต์ Groovy เช่นเดียวกับbuild.gradle
ไฟล์ settings.gradle
จะมีการเรียกใช้สคริปต์เพียงหนึ่งสคริปต์ในแต่ละบิลด์ (เปรียบเทียบกับbuild.gradle
สคริปต์หลาย ๆสคริปต์ในบิลด์หลายโปรเจ็กต์) settings.gradle
สคริปต์จะดำเนินการใด ๆ ก่อนที่build.gradle
สคริปต์และแม้กระทั่งก่อนที่Project
อินสแตนซ์ที่ถูกสร้างขึ้น ดังนั้นจึงมีการประเมินกับSettings
วัตถุ ด้วยSettings
อ็อบเจ็กต์นี้คุณสามารถเพิ่มโปรเจ็กต์ย่อยในบิลด์ของคุณแก้ไขพารามิเตอร์จากบรรทัดคำสั่ง ( StartParameter
) และเข้าถึงGradle
อ็อบเจ็กต์เพื่อลงทะเบียนตัวจัดการวงจรชีวิต ดังนั้นให้ใช้settings.gradle
หากการตั้งค่าของคุณเกี่ยวข้องกับการสร้างและไม่จำเป็นต้องเกี่ยวข้องกับโครงการหรือต้องใช้ตรรกะก่อนที่จะรวมโครงการย่อยที่เป็นไปได้
gradle.properties
gradle.properties
ไฟล์ Java ง่ายProperties
ไฟล์เท่านั้นที่ได้รับบทบาทเป็นพิเศษโดยถูกรวมโดยอัตโนมัติในขอบเขตของProject
วัตถุ (เป็นสิ่งที่เรียกว่า 'คุณสมบัติของโครงการ) เป็นที่เก็บคีย์ - ค่าอย่างง่ายที่อนุญาตเฉพาะค่าสตริง (ดังนั้นคุณต้องแยกรายการหรืออาร์เรย์ด้วยตัวเอง) คุณสามารถใส่gradle.properties
ไฟล์ไปยังตำแหน่งเหล่านี้:
.gradle
ไดเร็กทอรีของผู้ใช้(สำหรับค่าที่เกี่ยวข้องกับผู้ใช้หรือสภาพแวดล้อม)โครงการหลายโมดูลมีโมดูลหลักหนึ่งโมดูลและโมดูลย่อยจำนวนมาก มีเค้าโครงนี้:
(root)
+- settings.gradle
+- build.gradle # optional (commonly present)
+- gradle.properties # optional
+-- buildSrc/ # optional
| +- build.gradle
| +-- src/...
+-- my-gradle-stuff/ # optional
| +- utils.gradle # optional
+-- sub-a/
| +- build.gradle
| +- src/
+-- sub-b/
+- build.gradle
+- src/
โมดูลย่อยยังสามารถอยู่ลึกลงไปในโฟลเดอร์ย่อยได้ แต่หากไม่มีการแก้ไขโค้ดใน settings.gradle ชื่อของมันจะรวมชื่อของโฟลเดอร์ดังกล่าวไว้ด้วย
บทบาทหลักของ settings.gradle คือการกำหนดโมดูลย่อยที่รวมอยู่ทั้งหมดและเพื่อทำเครื่องหมายไดเร็กทอรีรูทของทรีของโมดูลดังนั้นคุณสามารถมีsettings.gradle
ไฟล์เดียวในโปรเจ็กต์แบบหลายโมดูล
rootProject.name = 'project-x'
include 'sub-a', 'sub-b'
ไฟล์การตั้งค่ายังเขียนด้วย groovy และสามารถปรับแต่งการค้นหาโมดูลย่อยได้
มีไฟล์ดังกล่าวหนึ่งไฟล์ต่อโมดูลซึ่งมีตรรกะการสร้างสำหรับโมดูลนี้
ในbuild.gradle
ไฟล์ของโมดูลหลักคุณสามารถใช้allprojects {}
หรือsubprojects {}
กำหนดการตั้งค่าสำหรับโมดูลอื่น ๆ ทั้งหมดได้
ในbuild.gradle
ไฟล์ของโมดูลย่อยคุณสามารถใช้compile project(':sub-a')
เพื่อทำให้โมดูลย่อยหนึ่งขึ้นอยู่กับอีกโมดูลหนึ่ง
นี่เป็นทางเลือกจุดประสงค์หลักคือเพื่อให้ตัวเลือกการเริ่มต้นใช้งานสำหรับการเรียกใช้ gradle เองเช่น
org.gradle.jvmargs=-Xmx=... -Dfile.encoding=UTF-8 ...
org.gradle.configureondemand=true
ค่าเหล่านี้สามารถถูกแทนที่โดยไฟล์USER_HOME/.gradle/gradle.properties
และลบล้างโดยอาร์กิวเมนต์บรรทัดคำสั่ง gradle นอกจากนี้ยังสามารถตั้งค่าตัวแปรสภาพแวดล้อมสำหรับบิลด์ในไฟล์นี้โดยใช้systemProp.
เป็นคำนำหน้า
คุณสมบัติใด ๆ ในไฟล์นี้สามารถใช้ใน build.gradle ใด ๆ ได้ดังนั้นบางโปรเจ็กต์จึงใส่เวอร์ชันอ้างอิงหรือข้อมูลรีลีสไว้gradle.properties
ด้วย แต่อาจเป็นการใช้ไฟล์นี้ในทางที่ผิด
(สามารถตั้งชื่อโฟลเดอร์หรือไฟล์ใด ๆ ก็ได้) คุณสามารถกำหนดไฟล์ gradle แบบกำหนดเองเพิ่มเติมเพื่อใช้นิยามซ้ำและรวมไว้ในไฟล์ gradle อื่น ๆ ผ่านทาง
apply from: "$rootDir/gradle/utils.gradle"
สถานที่อื่น ๆ ที่จะใส่สิ่งนี้อาจเป็นsrc/gradle
หรือsrc/build/gradle
โฟลเดอร์นี้มีความพิเศษเป็นเหมือนโครงการ gradle ที่แยกจากกันในตัวเอง สร้างขึ้นก่อนทำสิ่งอื่นใดและสามารถจัดเตรียมฟังก์ชันเพื่อใช้ในไฟล์ gradle อื่น ๆ ด้วยเหตุผลทางเทคนิคการสนับสนุน IDE สำหรับการอ้างอิงไปยังโฟลเดอร์นี้จึงทำงานได้ดีกว่าวิธีอื่น ๆ ในการแยกโค้ดทั่วไปจากหลาย ๆbuild.gradle
ไฟล์ไปยังตำแหน่งแยก
คุณสามารถกำหนดตรรกะการสร้างแบบกำหนดเองที่ซับซ้อนใน java, groovy หรือ kotlin แทนการเขียนและปรับใช้ปลั๊กอิน นอกจากนี้ยังมีประโยชน์สำหรับการทดสอบหน่วยโค้ดบิวด์ที่กำหนดเองของคุณเนื่องจากคุณสามารถทดสอบหน่วยได้ โครงสร้างโฟลเดอร์ซอร์สbuildSrc
สามารถปรับเปลี่ยนได้เช่นเดียวกับโปรเจ็กต์ java / groovy / kotlin