ما هو الفرق بين بناء جملة تعريف المهمة هذه في Gradle؟

StackOverflow https://stackoverflow.com/questions/2767888

  •  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 } }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top