ما هو الفرق بين بناء جملة تعريف المهمة هذه في Gradle؟
-
03-10-2019 - |
سؤال
أ)
task build << {
description = "Build task."
ant.echo('build')
}
ب)
task build {
description = "Build task."
ant.echo('build')
}
لاحظت أنه مع النوع B ، يبدو أن الرمز الموجود في المهمة يتم تنفيذه عند الكتابة gradle -t
- أصداء النمل "بناء" حتى عند إدراج جميع المهام المتاحة المختلفة. يتم عرض الوصف أيضًا أيضًا مع النوع B. ومع ذلك ، مع تنفيذ النوع A لا يتم تنفيذ رمز عند إدراج المهام المتاحة ، ولا يتم عرض الوصف عند التنفيذ gradle -t
. لا يبدو أن المستندات تتعرض للفرق بين هذين الجملة (اللذين وجدته) ، فقط أنه يمكنك تحديد المهمة في كلتا الحالتين.
المحلول
يحدد بناء الجملة الأول مهمة ، ويوفر بعض التعليمات البرمجية التي يتم تنفيذها عند تنفيذ المهمة. يحدد بناء الجملة الثاني مهمة ، ويوفر بعض التعليمات البرمجية التي سيتم تنفيذها على الفور لتكوين المهمة. فمثلا:
task build << { println 'this executes when build task is executed' }
task build { println 'this executes when the build script is executed' }
في الواقع ، فإن بناء الجملة الأول يعادل:
task build { doLast { println 'this executes when build task is executed' } }
لذلك ، في مثالك أعلاه ، بالنسبة لبناء بناء الجملة ، لا يظهر الوصف في Gradle -T لأن الرمز الذي يحدد الوصف لا يتم تنفيذه حتى يتم تنفيذ المهمة ، وهو ما لا يحدث عند تشغيل Gradle -T.
بالنسبة إلى بناء الجملة B ، يتم تشغيل الرمز الذي يقوم به ant.echo () لكل الاحتجاج من Gradle ، بما في ذلك Gradle -T
لتوفير كل من الإجراء لتنفيذ ووصف للمهمة التي يمكنك القيام بها أيًا من:
task build(description: 'some description') << { some code }
task build { description = 'some description'; doLast { some code } }