我不明白gradle插件块

apply plugin: 'someplugin1'
apply plugin: 'maven'

另一个是:

plugins {
   id 'org.hidetake.ssh' version '1.1.2'
}

在第一个块中,我们有一些插件名称。第二个包和版本。我不知道我应该在哪里用第一块,什么时候用第二块。


当前回答

不过,我想指出的是,一个插件不需要远程发布才能使用它! 它也可以是一个未发布的本地可用插件(无论是约定插件还是其他插件)。

如果有人想引用这样一个未发布的本地可用插件, 你必须将它所谓的“构建”包含在所需的组件/构建中(通过settings.gradle(.kts)-file识别),如下所示:

pluginManagement {
    includeBuild '<path-to-the-plugin-dir-containing-the-settings-file>'
}

完成之后,可以通过pluginId在plugins {}-DSL-block中使用本地插件。

其他回答

正如@cjstehno已经提到的,apply插件是一个遗留的方法,你应该避免。

随着插件DSL的引入,用户应该没有什么理由使用应用插件的传统方法了。这里记录了它,以防构建作者由于当前工作方式的限制而无法使用插件DSL。

使用新的plugins块方法,你可以添加一个插件,并使用可选参数apply来控制何时应用它:

plugins {
    id «plugin id» version «plugin version» [apply «false»]
}

如果你想在插件块中应用一个已经添加但尚未应用的插件,你仍然可以使用遗留方法。例如,在主项目中添加了一个插件xyz,但没有应用,它应该只应用在子项目subPro中:

plugins {
  id "xyz" version "1.0.0" apply false
}

subprojects { subproject ->
    if (subproject.name == "subPro") {
        apply plugin: 'xyz'
    }
}

注意,您不再需要这个版本了。除非你使用的是Core Gradle插件之一,如java, scala,…

在尝试创建Spring Boot应用程序时,我花了一些时间来理解其中的区别,这就是为什么过了一段时间后我又回答了这个问题。下面是使用Spring Boot插件的例子,对我帮助很大:

目前应该使用什么:

plugins {
  id "org.springframework.boot" version "2.0.1.RELEASE"
}

在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"

plugins块是应用插件的新方法,它们必须在Gradle插件存储库中可用。apply方法是向构建中添加插件的较老但更灵活的方法。

新的插件方法不能在多项目配置(子项目,所有项目)中工作,但可以在每个子项目的构建配置中工作。

我认为随着功能的发展,插件配置方法将取代旧的方法,但在这一点上,这两种方法都可以同时使用。

现在(在Gradle 6中),你可以不使用构建脚本就为插件命名存储库。 在设置。gradle,我们可以添加插件pluginManagement

pluginManagement {
    repositories {
        maven {
            url '../maven-repo'
        }
        gradlePluginPortal()
        ivy {
            url '../ivy-repo'
        }
    }
}

参考:https://docs.gradle.org/current/userguide/plugins.html秒:custom_plugin_repositories

如果插件需要一个版本,那么将版本号放在设置中的pluginManagement块中会更安全。Gradle文件,而不是插件块。

我说的更安全是指你不会遇到这样的错误,比如插件请求类路径上已经存在的插件不能包含一个版本。如果你将一个项目包含到另一个使用相同插件的项目中,并且你的插件版本在plugins块中,就会发生这种情况。

所以与其说:

plugins {
    id 'pl.allegro.tech.build.axion-release' version '1.10.3'
}

Do:

plugins {
  id 'pl.allegro.tech.build.axion-release'
}

然后在设置中。gradle文件:

pluginManagement {
    plugins {
        id 'pl.allegro.tech.build.axion-release' version '1.10.3'
    }
}

这是使用Gradle插件的两种不同方式。

应用插件的方式:首先从根构建中解决你需要的插件。gradle:

buildscript {
        repositories {
            // other repositories...
            mavenCentral()
        }
        dependencies {
            // other plugins...
            classpath 'com.google.dagger:hilt-android-gradle-plugin:2.44'
    }

然后在构建中。你的Android gradle模块应用插件:

apply plugin: 'com.android.application'
apply plugin: 'com.google.dagger.hilt.android'

插件方式:结合解析和应用在你的根构建。gradle:

plugins {
    // other plugins...
    id 'com.google.dagger.hilt.android' version '2.44' apply false
}

然后在构建中。你的Android gradle模块应用插件:

plugins {
    // other plugins...
    id 'com.android.application'
    id 'com.google.dagger.hilt.android'
}

android {
    // ...
}