2014-04-02 23 views
5

Làm quen với cả Gradle và Groovy Tôi thấy mình gặp khó khăn trong việc hiểu cú pháp của tập lệnh build.gradle.Cú pháp Gradle/Groovy và các từ khóa

Tôi hiểu (ít nhất là tôi nghĩ vậy) rằng build.gradle là mã đơn giản được sử dụng làm DSL nơi từ khóa được xác định ở nơi khác.

Vui lòng giải thích các phần khác nhau là gì. Được lấy từ Hướng dẫn:

defaultTasks 'distribution' 

task distribution << { 
    println "We build the zip with version=$version" 
} 

task release(dependsOn: 'distribution') << { 
    println 'We release now' 
} 

gradle.taskGraph.whenReady {taskGraph -> 
    if (taskGraph.hasTask(release)) { 
     version = '1.0' 
    } else { 
     version = '1.0-SNAPSHOT' 
    } 
} 

ví dụ: Tôi nghĩ rằng tôi biết println là một chức năng. Tôi biết văn bản trong dấu ngoặc kép là một chuỗi. Tôi đoán công cụ trong niềng răng xoăn là một đóng cửa. Nhưng số phát hành là gì/* phân phối *? Nó có phải là một chuỗi không? Có phải là tham số cho hàm tác vụ? Và tại sao tôi có thể sử dụng nó trong hasTask (release) mà không có dấu ngoặc kép?

Vậy điều gì exacly : 'defaultTasks', 'nhiệm vụ', 'phát hành', '< <', 'gradle', 'whenReady', '->'?

Phần thưởng: có cách nào hấp dẫn để tìm hiểu bản thân mình không?

+0

Có thể trùng lặp [Hiểu cú pháp groovy trong định nghĩa tác vụ gradle] (https://stackoverflow.com/questions/27584463/understanding-the-groovy-syntax-in-a-gradle-task-definition) – tkruse

Trả lời

2

Nói chung, bạn không nên quan tâm. Đó là một DSL trong đó các thuật ngữ như "tham số cho một nhiệm vụ chức năng" không nên làm phiền bạn. Những gì bạn cần biết là thêm tác vụ mới là task taskName.

Nếu bạn thực sự muốn đào sâu (ví dụ: để mở rộng Gradle, triển khai plugin, v.v.) Gradle DSL docs là bạn của bạn. Từ đó, bạn có thể tìm hiểu rằng task is a method on Project object.

+0

Về mặt kỹ thuật , ngôn ngữ xây dựng Gradle là một ngôn ngữ cụ thể của miền (DSL) được triển khai bằng cách sử dụng thời gian biên dịch Groovy và lập trình meta thời gian chạy. Bạn có thể tìm hiểu cách sử dụng DSL (nhưng không phải cách nó được triển khai) trong [Tham chiếu Ngôn ngữ Xây dựng Gradle] (http://gradle.org/docs/current/dsl/index.html). –

+2

Cảm ơn câu trả lời nhanh. Nhưng tôi coi "không quan tâm" không thỏa mãn. Tôi nghĩ rằng sự hiểu biết các nguyên tắc cơ bản là cơ bản trong sự hiểu biết làm thế nào để sử dụng một cái gì đó. Ít nhất là từ quan điểm lập trình viên. Ví dụ. Tôi không muốn nhớ rằng tôi phải sử dụng dấu ngoặc kép * ở đây * nhưng không * ở đó *, nhưng tôi muốn biết rằng * công cụ này * là một khai báo chức năng và không cần chúng trong khi * thứ đó * mất đối số chuỗi trong khi * các nội dung khác * nhận một chuỗi nhưng tự động chuyển đổi ... v.v. – Scheintod

0

Nhưng bản phát hành/phân phối là gì? Nó có phải là một chuỗi không? Nó là một tham số cho một nhiệm vụ chức năng? Và tại sao tôi có thể sử dụng nó trong hasTask (release) mà không có dấu ngoặc kép?

Đó là chuỗi trong Gradle, nhưng không phải trong vanilla Groovy. Đây được đề cập trong this response

Vì vậy, những gì chính xác là: 'defaultTasks', 'nhiệm vụ', '< <', 'gradle', 'whenReady', '->'?

Đó chủ yếu là các phương pháp hoặc trường. Fields:

  • project.defaultTasks
  • project.gradle

Phương pháp:

  • project.task()
  • task.whenReady()
  • nhiệm vụ. leftShift()

-> là cú pháp cơ bản về groovy cho các bao đóng.

Các vấn đề liên quan