Gradle - Xây dựng tập lệnh

Gradle xây dựng một tệp kịch bản để xử lý hai thứ; một làprojects và một cái khác là tasks. Mỗi bản dựng Gradle đại diện cho một hoặc nhiều dự án. Một dự án đại diện cho một thư viện JAR hoặc một ứng dụng web hoặc nó có thể đại diện cho một ZIP được tập hợp từ các JAR do các dự án khác tạo ra. Nói một cách dễ hiểu, một dự án được tạo thành từ các nhiệm vụ khác nhau. Nhiệm vụ có nghĩa là một phần công việc mà một bản dựng thực hiện. Một nhiệm vụ có thể là biên dịch một số lớp, tạo JAR, tạo Javadoc hoặc xuất bản một số tệp lưu trữ vào kho lưu trữ.

Gradle sử dụng Groovy language để viết kịch bản.

Viết kịch bản xây dựng

Gradle cung cấp Ngôn ngữ dành riêng cho miền (DSL) để mô tả các bản dựng. Điều này sử dụng ngôn ngữ Groovy để mô tả một công trình dễ dàng hơn. Mỗi tập lệnh xây dựng của Gradle được mã hóa bằng UTF-8, được lưu ngoại tuyến và được đặt tên là build.gradle.

build.gradle

Chúng tôi đang mô tả về các nhiệm vụ và dự án bằng cách sử dụng tập lệnh Groovy. Bạn có thể chạy bản dựng Gradle bằng lệnh Gradle. Lệnh này tìm kiếm một tệp có tênbuild.gradle. Hãy xem ví dụ sau đại diện cho một tập lệnh nhỏ được intutorialspoint. Sao chép và lưu tập lệnh sau vào một tệp có tênbuild.gradle. Tập lệnh xây dựng này xác định tên tác vụ hello, được sử dụng để in chuỗi điểm hướng dẫn.

task hello {
   doLast {
      println 'tutorialspoint'
   }
}

Thực hiện lệnh sau trong dấu nhắc lệnh. Nó thực thi tập lệnh trên. Bạn nên thực thi điều này, nơi tệp build.gradle được lưu trữ.

C:\> gradle –q hello

Đầu ra:

tutorialspoint

Nếu bạn nghĩ rằng nhiệm vụ hoạt động tương tự như mục tiêu của ANT, thì đúng vậy - nhiệm vụ Gradle tương đương với mục tiêu ANT.

Bạn có thể đơn giản hóa tác vụ xin chào này bằng cách chỉ định một phím tắt (đại diện cho một biểu tượng <<) đến doLasttuyên bố. Nếu bạn thêm phím tắt này vào tác vụ trênhello nó sẽ giống như tập lệnh sau.

task hello << {
   println 'tutorialspoint'
}

Tương tự như trên, bạn có thể thực thi tập lệnh trên bằng cách sử dụng gradle –q hello chỉ huy.

Tập lệnh lớp chủ yếu sử dụng hai Đối tượng thực, một là Đối tượng Dự án và một đối tượng khác là Đối tượng Tập lệnh.

Project Object- Mỗi kịch bản mô tả về một hoặc nhiều dự án. Trong khi thực thi, tập lệnh này cấu hình Đối tượng Dự án. Bạn có thể gọi một số phương thức và sử dụng thuộc tính trong tập lệnh xây dựng của bạn được ủy quyền cho Đối tượng dự án.

Script Object- Gradle đưa mã tập lệnh vào các lớp thực hiện Giao diện tập lệnh và sau đó thực thi. Điều này có nghĩa là tất cả các thuộc tính và phương thức được khai báo bởi giao diện tập lệnh đều có sẵn trong tập lệnh của bạn.

Bảng sau xác định danh sách standard project properties. Tất cả các thuộc tính này đều có sẵn trong tập lệnh xây dựng của bạn.

Sr không. Tên Kiểu Giá trị mặc định
1 dự án Dự án Phiên bản dự án
2 Tên Chuỗi Tên của thư mục dự án.
3 con đường Chuỗi Đường dẫn tuyệt đối của dự án.
4 sự miêu tả Chuỗi Mô tả cho dự án.
5 projectDir Tập tin Thư mục chứa tập lệnh xây dựng.
6 buildDir Tập tin projectDir / xây dựng
7 nhóm Vật Không xác định
số 8 phiên bản Vật Không xác định
9 con kiến AntBuilder Một phiên bản AntBuilder

Kiến thức cơ bản về Groovy

Các tập lệnh xây dựng Gradle sử dụng API Groovy có độ dài đầy đủ. Là một công ty khởi nghiệp, hãy xem các ví dụ sau.

Ví dụ sau giải thích về việc chuyển đổi một chuỗi thành chữ hoa.

Sao chép và lưu đoạn mã dưới đây vào build.gradle tập tin.

task upper << {
   String expString = 'TUTORIALS point'
   println "Original: " + expString
   println "Upper case: " + expString.toUpperCase()
}

Thực hiện lệnh sau trong dấu nhắc lệnh. Nó thực thi tập lệnh đã cho ở trên. Bạn nên thực thi điều này, nơi tệp build.gradle được lưu trữ.

C:\> gradle –q upper

Đầu ra:

Original: TUTORIALS point
Upper case: TUTORIALS POINT

Ví dụ sau giải thích về việc in giá trị của một tham số ngầm định ($ it) trong 4 lần.

Sao chép và lưu mã sau vào build.gradle tập tin.

task count << {
   4.times { 
      print "$it " 
   }
}

Thực hiện lệnh sau trong dấu nhắc lệnh. Nó thực thi tập lệnh đã cho ở trên. Bạn nên thực thi điều này, nơi tệp build.gradle được lưu trữ.

$ gradle –q count

Đầu ra:

0 1 2 3

Ngôn ngữ Groovy cung cấp nhiều tính năng trong đó một số tính năng quan trọng được thảo luận dưới đây.

Phương pháp Groovy JDK

Groovy bổ sung rất nhiều phương thức hữu ích cho các lớp Java tiêu chuẩn. Ví dụ, API có thể lặp lại từ JDK triển khai mộteach() phương thức lặp qua các phần tử của Giao diện có thể lặp lại.

Sao chép và lưu mã sau vào build.gradle tập tin.

task groovyJDK << {
   String myName = "Marc";
   myName.each() { 
      println "${it}" 
   };
}

Thực hiện lệnh sau trong dấu nhắc lệnh. Nó thực thi tập lệnh đã cho ở trên. Bạn nên thực thi điều này, nơi lưu trữ tệp build.gradle.

C:\> gradle –q groovyJDK

Đầu ra:

M
a
r
c

Người tiếp cận tài sản

Bạn có thể tự động truy cập các phương thức getter và setter thích hợp của một thuộc tính cụ thể bằng cách chỉ định tham chiếu của nó.

Đoạn mã sau xác định cú pháp của các phương thức getter và setter của một thuộc tính buildDir.

// Using a getter method
println project.buildDir
println getProject().getBuildDir()

// Using a setter method
project.buildDir = 'target'
getProject().setBuildDir('target')

Dấu ngoặc đơn tùy chọn trên lệnh gọi phương thức

Groovy có một tính năng đặc biệt trong việc gọi các phương thức đó là dấu ngoặc đơn là tùy chọn cho việc gọi phương thức. Tính năng này cũng áp dụng cho tập lệnh Gradle.

Hãy xem cú pháp sau. Điều đó xác định một phương thức gọisystemProperty của test vật.

test.systemProperty 'some.prop', 'value'
test.systemProperty('some.prop', 'value')

Đóng lại như là tham số cuối cùng của phương pháp

Gradle DSL sử dụng các bao đóng ở nhiều nơi. Trong đó tham số cuối cùng của một phương thức là một bao đóng, bạn có thể đặt bao đóng sau khi gọi phương thức.

Đoạn mã sau định nghĩa các cú pháp mà Closures sử dụng làm tham số phương thức repositories ().

repositories {
   println "in a closure"
}
repositories() { 
   println "in a closure" 
}
repositories({ println "in a closure" })

Nhập mặc định

Gradle tự động thêm một tập hợp các câu lệnh nhập vào các tập lệnh Gradle. Danh sách sau đây hiển thị cho bạn các gói nhập mặc định vào tập lệnh Gradle.

import org.gradle.*
import org.gradle.api.*
import org.gradle.api.artifacts.*
import org.gradle.api.artifacts.cache.*
import org.gradle.api.artifacts.component.*
import org.gradle.api.artifacts.dsl.*
import org.gradle.api.artifacts.ivy.*
import org.gradle.api.artifacts.maven.*
import org.gradle.api.artifacts.query.*
import org.gradle.api.artifacts.repositories.*
import org.gradle.api.artifacts.result.*
import org.gradle.api.component.*
import org.gradle.api.credentials.*
import org.gradle.api.distribution.*
import org.gradle.api.distribution.plugins.*
import org.gradle.api.dsl.*
import org.gradle.api.execution.*
import org.gradle.api.file.*
import org.gradle.api.initialization.*
import org.gradle.api.initialization.dsl.*
import org.gradle.api.invocation.*
import org.gradle.api.java.archives.*
import org.gradle.api.logging.*
import org.gradle.api.plugins.*
import org.gradle.api.plugins.announce.*
import org.gradle.api.plugins.antlr.*
import org.gradle.api.plugins.buildcomparison.gradle.*
import org.gradle.api.plugins.jetty.*
import org.gradle.api.plugins.osgi.*
import org.gradle.api.plugins.quality.*
import org.gradle.api.plugins.scala.*
import org.gradle.api.plugins.sonar.*
import org.gradle.api.plugins.sonar.model.*
import org.gradle.api.publish.*
import org.gradle.api.publish.ivy.*
import org.gradle.api.publish.ivy.plugins.*
import org.gradle.api.publish.ivy.tasks.*
import org.gradle.api.publish.maven.*
import org.gradle.api.publish.maven.plugins.*
import org.gradle.api.publish.maven.tasks.*
import org.gradle.api.publish.plugins.*
import org.gradle.api.reporting.*
import org.gradle.api.reporting.components.*
import org.gradle.api.reporting.dependencies.*
import org.gradle.api.reporting.model.*
import org.gradle.api.reporting.plugins.*
import org.gradle.api.resources.*
import org.gradle.api.specs.*
import org.gradle.api.tasks.*
import org.gradle.api.tasks.ant.*
import org.gradle.api.tasks.application.*
import org.gradle.api.tasks.bundling.*
import org.gradle.api.tasks.compile.*
import org.gradle.api.tasks.diagnostics.*
import org.gradle.api.tasks.incremental.*
import org.gradle.api.tasks.javadoc.*
import org.gradle.api.tasks.scala.*
import org.gradle.api.tasks.testing.*
import org.gradle.api.tasks.testing.junit.*
import org.gradle.api.tasks.testing.testng.*
import org.gradle.api.tasks.util.*
import org.gradle.api.tasks.wrapper.*
import org.gradle.authentication.*
import org.gradle.authentication.http.*
import org.gradle.buildinit.plugins.*
import org.gradle.buildinit.tasks.*
import org.gradle.external.javadoc.*
import org.gradle.ide.cdt.*
import org.gradle.ide.cdt.tasks.*
import org.gradle.ide.visualstudio.*
import org.gradle.ide.visualstudio.plugins.*
import org.gradle.ide.visualstudio.tasks.*
import org.gradle.ivy.*
import org.gradle.jvm.*
import org.gradle.jvm.application.scripts.*
import org.gradle.jvm.application.tasks.*
import org.gradle.jvm.platform.*
import org.gradle.jvm.plugins.*
import org.gradle.jvm.tasks.*
import org.gradle.jvm.tasks.api.*
import org.gradle.jvm.test.*
import org.gradle.jvm.toolchain.*
import org.gradle.language.assembler.*
import org.gradle.language.assembler.plugins.*
import org.gradle.language.assembler.tasks.*
import org.gradle.language.base.*
import org.gradle.language.base.artifact.*
import org.gradle.language.base.plugins.*
import org.gradle.language.base.sources.*
import org.gradle.language.c.*
import org.gradle.language.c.plugins.*
import org.gradle.language.c.tasks.*
import org.gradle.language.coffeescript.*
import org.gradle.language.cpp.*
import org.gradle.language.cpp.plugins.*
import org.gradle.language.cpp.tasks.*
import org.gradle.language.java.*
import org.gradle.language.java.artifact.*
import org.gradle.language.java.plugins.*
import org.gradle.language.java.tasks.*
import org.gradle.language.javascript.*
import org.gradle.language.jvm.*
import org.gradle.language.jvm.plugins.*
import org.gradle.language.jvm.tasks.*
import org.gradle.language.nativeplatform.*
import org.gradle.language.nativeplatform.tasks.*
import org.gradle.language.objectivec.*
import org.gradle.language.objectivec.plugins.*
import org.gradle.language.objectivec.tasks.*
import org.gradle.language.objectivecpp.*
import org.gradle.language.objectivecpp.plugins.*
import org.gradle.language.objectivecpp.tasks.*
import org.gradle.language.rc.*
import org.gradle.language.rc.plugins.*
import org.gradle.language.rc.tasks.*
import org.gradle.language.routes.*
import org.gradle.language.scala.*
import org.gradle.language.scala.plugins.*
import org.gradle.language.scala.tasks.*
import org.gradle.language.scala.toolchain.*
import org.gradle.language.twirl.*
import org.gradle.maven.*
import org.gradle.model.*
import org.gradle.nativeplatform.*
import org.gradle.nativeplatform.platform.*
import org.gradle.nativeplatform.plugins.*
import org.gradle.nativeplatform.tasks.*
import org.gradle.nativeplatform.test.*
import org.gradle.nativeplatform.test.cunit.*
import org.gradle.nativeplatform.test.cunit.plugins.*
import org.gradle.nativeplatform.test.cunit.tasks.*
import org.gradle.nativeplatform.test.googletest.*
import org.gradle.nativeplatform.test.googletest.plugins.*
import org.gradle.nativeplatform.test.plugins.*
import org.gradle.nativeplatform.test.tasks.*
import org.gradle.nativeplatform.toolchain.*
import org.gradle.nativeplatform.toolchain.plugins.*
import org.gradle.platform.base.*
import org.gradle.platform.base.binary
import org.gradle.platform.base.component.*
import org.gradle.platform.base.plugins.*
import org.gradle.platform.base.test.*
import org.gradle.play.*
import org.gradle.play.distribution.*
import org.gradle.play.platform.*
import org.gradle.play.plugins.*
import org.gradle.play.tasks.*
import org.gradle.play.toolchain.*
import org.gradle.plugin.use.*
import org.gradle.plugins.ear.*
import org.gradle.plugins.ear.descriptor.*
import org.gradle.plugins.ide.api.*
import org.gradle.plugins.ide.eclipse.*
import org.gradle.plugins.ide.idea.*
import org.gradle.plugins.javascript.base.*
import org.gradle.plugins.javascript.coffeescript.*
import org.gradle.plugins.javascript.envjs.*
import org.gradle.plugins.javascript.envjs.browser.*
import org.gradle.plugins.javascript.envjs.http.*
import org.gradle.plugins.javascript.envjs.http.simple.*
import org.gradle.plugins.javascript.jshint.*
import org.gradle.plugins.javascript.rhino.*
import org.gradle.plugins.javascript.rhino.worker.*
import org.gradle.plugins.signing.*
import org.gradle.plugins.signing.signatory.*
import org.gradle.plugins.signing.signatory.pgp.*
import org.gradle.plugins.signing.type.*
import org.gradle.plugins.signing.type.pgp.*
import org.gradle.process.*
import org.gradle.sonar.runner.*
import org.gradle.sonar.runner.plugins.*
import org.gradle.sonar.runner.tasks.*
import org.gradle.testing.jacoco.plugins.*
import org.gradle.testing.jacoco.tasks.*
import org.gradle.testkit.runner.*
import org.gradle.util.*