世界杯预选赛亚洲区_高达世界杯 - fzxzyy.com

实现自定义任务

- 世界杯奖杯叫什么

可执行任务有输入和输出。输入和输出可以是文件、目录或变量。

在可执行任务中

输入由文件、文件夹和/或配置数据的集合组成。例如,javaCompile 任务接受 Java 源文件和构建脚本配置(如 Java 版本)作为输入。

输出指一个或多个文件或文件夹。例如,javaCompile 任务生成类文件作为输出。

然后,jar 任务将这些类文件作为输入,并生成一个 JAR 归档文件。

明确定义的任务输入和输出有两个目的:

它们告知 Gradle 任务依赖关系。例如,如果 Gradle 理解 compileJava 任务的输出是 jar 任务的输入,它将优先运行 compileJava。

它们有助于增量构建。例如,假设 Gradle 识别出任务的输入和输出保持不变。在这种情况下,它可以利用先前构建运行的结果或构建缓存,从而完全避免重新运行任务动作。

当你应用一个插件(如 java-library 插件)时,Gradle 会自动注册一些任务并用默认值配置它们。

让我们在一个虚构的示例项目中定义一个将 JAR 和启动脚本打包成归档文件的任务。

gradle-project

├── app

│ ├── build.gradle.kts // app build logic

│ ├── run.sh // script file

│ └── ... // some java code

├── settings.gradle.kts // includes app subproject

├── gradle

├── gradlew

└── gradlew.bat

gradle-project

├── app

│ ├── build.gradle // app build logic

│ ├── run.sh // script file

│ └── ... // some java code

├── settings.gradle // includes app subproject

├── gradle

├── gradlew

└── gradlew.bat

run.sh 脚本可以从构建中执行 Java 应用程序(一旦打包成 JAR)。

app/run.sh

java -cp 'libs/*' gradle.project.app.App

让我们使用 task.register() 注册一个名为 packageApp 的新任务。

app/build.gradle.kts

tasks.register("packageApp") {

}

app/build.gradle

tasks.register(Zip, "packageApp") {

}

我们使用了 Gradle 核心中现有的 Zip 任务实现(即 DefaultTask 的子类)。由于我们在这里注册了一个新任务,它没有预先配置。我们需要配置输入和输出。

定义输入和输出是使任务成为可执行任务的关键。

对于 Zip 任务类型,我们可以使用 from() 方法将文件添加到输入中。在我们的例子中,我们添加了运行脚本。

如果输入是我们直接创建或编辑的文件,例如运行文件或 Java 源代码,它通常位于我们的项目目录中。为了确保我们使用正确的位置,我们使用 layout.projectDirectory 并定义到项目目录根的相对路径。

我们提供 jar 任务的输出以及所有依赖项的 JAR(使用 configurations.runtimeClasspath)作为额外输入。

对于输出,我们需要定义两个属性。

首先,目标目录,它应该在构建文件夹内。我们可以通过 layout 访问它。

其次,我们需要为 zip 文件指定一个名称,我们将其命名为 myApplication.zip。

这是完整的任务示例:

app/build.gradle.kts

val packageApp = tasks.register("packageApp") {

from(layout.projectDirectory.file("run.sh")) // input - run.sh file

from(tasks.jar) { // input - jar task output

into("libs")

}

from(configurations.runtimeClasspath) { // input - jar of dependencies

into("libs")

}

destinationDirectory.set(layout.buildDirectory.dir("dist")) // output - location of the zip file

archiveFileName.set("myApplication.zip") // output - name of the zip file

}

app/build.gradle

def packageApp = tasks.register(Zip, 'packageApp') {

from layout.projectDirectory.file('run.sh') // input - run.sh file

from tasks.jar { // input - jar task output

into 'libs'

}

from configurations.runtimeClasspath { // input - jar of dependencies

into 'libs'

}

destinationDirectory.set(layout.buildDirectory.dir('dist')) // output - location of the zip file

archiveFileName.set('myApplication.zip') // output - name of the zip file

}

如果我们运行 packageApp 任务,将生成 myApplication.zip。

$./gradlew :app:packageApp

> Task :app:compileJava

> Task :app:processResources NO-SOURCE

> Task :app:classes

> Task :app:jar

> Task :app:packageApp

BUILD SUCCESSFUL in 1s

3 actionable tasks: 3 executed

Gradle 执行了构建 JAR 文件所需的一些任务,其中包括 app 项目代码的编译和代码依赖项的编译。

查看新创建的 ZIP 文件,我们可以看到它包含了运行 Java 应用程序所需的一切:

> unzip -l ./app/build/dist/myApplication.zip

Archive: ./app/build/dist/myApplication.zip

Length Date Time Name

--------- ---------- ----- ----

42 01-31-2024 14:16 run.sh

0 01-31-2024 14:22 libs/

847 01-31-2024 14:22 libs/app.jar

3041591 01-29-2024 14:20 libs/guava-32.1.2-jre.jar

4617 01-29-2024 14:15 libs/failureaccess-1.0.1.jar

2199 01-29-2024 14:15 libs/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar

19936 01-29-2024 14:15 libs/jsr305-3.0.2.jar

223979 01-31-2024 14:16 libs/checker-qual-3.33.0.jar

16017 01-31-2024 14:16 libs/error_prone_annotations-2.18.0.jar

--------- -------

3309228 9 files

可执行任务应连接到生命周期任务,以便开发人员只需运行生命周期任务。

到目前为止,我们直接调用了新任务。现在,我们将其连接到生命周期任务。

以下内容添加到构建脚本中,以便使用 dependsOn() 将 packageApp 可执行任务连接到 build 生命周期任务。

app/build.gradle.kts

tasks.build {

dependsOn(packageApp)

}

app/build.gradle

tasks.build {

dependsOn(packageApp)

}

我们看到运行 :build 也会运行 :packageApp。

$ ./gradlew :app:build

> Task :app:compileJava UP-TO-DATE

> Task :app:processResources NO-SOURCE

> Task :app:classes UP-TO-DATE

> Task :app:jar UP-TO-DATE

> Task :app:startScripts

> Task :app:distTar

> Task :app:distZip

> Task :app:assemble

> Task :app:compileTestJava

> Task :app:processTestResources NO-SOURCE

> Task :app:testClasses

> Task :app:test

> Task :app:check

> Task :app:packageApp

> Task :app:build

BUILD SUCCESSFUL in 1s

8 actionable tasks: 6 executed, 2 up-to-date

如果需要,您可以定义自己的生命周期任务。

计算机视觉和滤帧技术
织梦DEDECMS数据库配置文件在哪?如何修改配置信息