Yev*_*lik 139 groovy gradle gradle-plugin
我不明白gradle插件块
apply plugin: 'someplugin1'
apply plugin: 'maven'
Run Code Online (Sandbox Code Playgroud)
和其他一个:
plugins {
id 'org.hidetake.ssh' version '1.1.2'
}
Run Code Online (Sandbox Code Playgroud)
在第一个块我们有一些插件名称.在第二个包和版本.我不明白我应该在哪里使用第一块和第二块.
cjs*_*hno 137
该plugins
块是应用插件的较新方法,它们必须在Gradle插件存储库中可用.该apply
方法是一种更老,更灵活的方法,可以为您的构建添加插件.
新plugins
方法在多项目配置(subprojects
,allprojects
)中不起作用,但将适用于每个子项目的构建配置.
我认为随着功能的进步,plugins
配置方法将超越旧方法,但此时两者都可以同时使用.
Mou*_*usa 35
正如@cjstehno已经提到的那样apply plugin
,你应该避免使用遗留方法.
随着插件DSL的引入,用户应该没有理由使用传统的应用插件的方法.这里记录的是,如果构建作者由于其当前工作方式的限制而无法使用插件DSL.
使用新plugins block
方法,您可以添加插件并使用可选参数控制何时应用它apply
:
plugins {
id «plugin id» version «plugin version» [apply «false»]
}
Run Code Online (Sandbox Code Playgroud)
在您想要在plugins
块中应用已添加但未应用的插件的情况下,您仍将使用旧方法.例如,在主项目xyz
中添加了插件但未应用插件,它应仅应用于子项目中subPro
:
plugins {
id "xyz" version "1.0.0" apply false
}
subprojects { subproject ->
if (subproject.name == "subPro") {
apply plugin: 'xyz'
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您不再需要该版本.该版本是在需要的plugins
块,除非你正在使用的核心摇篮插件之一,例如java
,scala
,...
在尝试创建Spring Boot
应用程序时,我花了一些时间来理解差异,这就是为什么我会在一段时间后再次回答这个问题.以下使用Spring Boot
插件的示例帮助了我很多:
目前应该使用什么:
plugins {
id "org.springframework.boot" version "2.0.1.RELEASE"
}
Run Code Online (Sandbox Code Playgroud)
Gradle 2.1之前使用的内容:
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE"
}
}
apply plugin: "org.springframework.boot"
Run Code Online (Sandbox Code Playgroud)
小智 18
这是使用 Gradle 插件的两种不同方式。
apply plugin
首先在根build.gradle文件中解析您需要的插件。
例子:
buildscript {
repositories {
// other repositories...
mavenCentral()
}
dependencies {
// other plugins...
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.44'
}
Run Code Online (Sandbox Code Playgroud)
然后在Gradle 模块的build.gradle中应用插件。
例子:
apply plugin: 'com.android.application'
apply plugin: 'com.google.dagger.hilt.android'
Run Code Online (Sandbox Code Playgroud)
plugins
将resolve 和apply 合并到根build.gradle文件中。
例子:
plugins {
// other plugins...
id 'com.google.dagger.hilt.android' version '2.44' apply false
}
Run Code Online (Sandbox Code Playgroud)
然后在Gradle 模块的build.gradle中应用插件。
例子:
plugins {
// other plugins...
id 'com.android.application'
id 'com.google.dagger.hilt.android'
}
android {
// ...
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*hik 12
我将对已经说过的内容进行一些修改。Gradle 引入了插件块的概念,作为一种加速和优化构建过程的技术。Gradle 的文档是这样说的:
这种向项目添加插件的方式不仅仅是一种更方便的语法。插件 DSL 的处理方式允许 Gradle 非常早且非常快速地确定正在使用的插件。这使得 Gradle 可以做一些聪明的事情,例如:
优化插件类的加载和重用。
为编辑者提供有关构建脚本中潜在属性和值的详细信息,以获取编辑帮助。
这要求在执行构建脚本的其余部分之前,以 Gradle 可以轻松快速提取的方式指定插件。它还要求要使用的插件的定义在某种程度上是静态的。
它不仅仅是一种处理插件的新方法,也是一种改进构建过程和/或用户编辑体验的方法。
为了使其工作,需要在构建的顶部指定它,但如果包含的话,也需要在 buildscript 块之后指定。这是为什么?因为构建脚本中的代码是按照其编写的顺序进行评估的。必须在评估插件块之前评估构建脚本块。请记住,buildscript 块是关于设置插件环境的。因此,插件块必须在 buildscript 块之后指定的规则。
新的插件块不仅指定项目正在使用的插件,还指定是否应用该插件。默认情况下,plugins 块中的所有插件都会自动应用,除非特别声明不应用(即在plugins 块中的插件声明后添加“apply false”)。
那么为什么你要声明一个插件而不应用它呢?我能想到的主要原因有两个:
1.) 这样你就可以声明你想要使用的插件的版本。声明插件后,该插件现在位于“类路径”上。一旦插件位于类路径上,以后应用它时就不再需要指定插件的版本。在多项目构建中,这使得支持构建脚本变得更加容易。(即,您只有一处指定插件版本。)
2.) 有时,您可能有一个插件,需要在应用之前定义某些内容。在这种情况下,您可以在插件块中声明一个插件,并推迟应用该插件,直到定义该插件需要作为输入的内容之后。例如,我有一个自定义插件,它查找名为“mavenResource”的配置。在依赖项块中,我将添加一个依赖项,例如:“mavenResource( maven_coordinate )”。该插件将找到 mavenResource 配置中包含的所有依赖项,并将关联的 Maven 工件复制到项目的“src/main/resources”目录中。如您所见,在将 mavenResource 配置添加到该项目并定义 mavenResource 依赖项之前,我不想应用该插件。因此,我在插件块中定义了自定义插件,并在定义项目依赖项后应用它。因此,认为应用插件是旧式且错误的概念是一种误解。
有些人可能想知道应用插件意味着什么。这非常简单。这意味着您调用插件的 apply 函数,并将应用该插件的项目的 Gradle Project 对象传递给它。插件从那时起做什么完全由插件决定。最常见的是,apply 函数通常会创建一些 Gradle 任务并将它们添加到 Gradle 构建任务依赖关系图中。当 Gradle 开始执行阶段时,这些任务将在构建过程中的适当时间执行。插件 apply 函数还可以执行诸如将某些工作推迟到 afterEvaluate 之类的操作。这是一种允许在构建脚本中设置其他内容的方法,即使它们是稍后在构建脚本中定义的。所以,您可能会问为什么我不在我的自定义插件中执行此操作。我观察到,下一个子项目在根项目完成评估后开始处理。就我而言,我需要在下一个子项目开始之前添加资源。因此,存在一种竞争条件,我通过不执行 afterEvaluate 技术并在我需要的设置完成后专门应用该插件来避免这种情况。
现在(在 Gradle 6 中)您可以在不使用构建脚本的情况下为插件指定存储库名称。在settings.gradle中,我们可以添加插件pluginManagement
pluginManagement {
repositories {
maven {
url '../maven-repo'
}
gradlePluginPortal()
ivy {
url '../ivy-repo'
}
}
}
Run Code Online (Sandbox Code Playgroud)
参考:https : //docs.gradle.org/current/userguide/plugins.html#sec : custom_plugin_repositories
归档时间: |
|
查看次数: |
28372 次 |
最近记录: |