如何正确添加 gradle 插件到多项目?
How to properly add gradle plugin to multiproject?
我有一个多项目build.gradle:
https://gist.github.com/iva-nova-e-katerina/7c72399ede83b5f78dbae19582974f35
并且此脚本因错误而失败:
> Plugin with id 'com.github.blindpirate.osgi' not found.
为什么?也许 buildscript {} 应该在 allprojects 之外?如何正确添加 gradle 插件到多项目?
按照您的建议,您可以通过将 buildscript
移到 allprojects
之外来解决此问题。例如
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.github.blindpirate:gradle-legacy-osgi-plugin:0.0.4"
}
}
subprojects {
apply plugin: "com.github.blindpirate.osgi"
}
解释了这个工作的原因
For multi-project builds, the dependencies declared with a project’s
buildscript() method are available to the build scripts of all its
sub-projects.
当有人在官方论坛上提问 similar question 时,Gradle 也推荐了这种方法。
现在回答你的问题如何正确地将 gradle 插件添加到多项目?。有一个更好的方法来应用 gradle-legacy-osgi-plugin 插件,即使用插件 DSL,例如
plugins {
id "com.github.blindpirate.osgi" version "0.0.6"
}
使用插件 DSL 比您当前使用的 apply
语法有一些 significant advantages,因此通常是推荐的方法。
由于您在多项目设置中工作,插件 DSL 将与您当前使用的 subprojects
语法不兼容。我建议采用以下方法之一:
- 在有版本的根项目中应用插件,然后在没有版本的子项目中应用插件。使用
apply false
来避免插件被应用到根项目。 docs 有一个完整的例子。
plugins {
id "com.github.blindpirate.osgi" version "0.0.6" apply false
}
- 创建一个 convention plugin 并将其应用于每个子项目
不鼓励使用 allprojects
和 subprojects
语法,因为它会将项目耦合在一起,从而导致并行构建执行等功能出现问题。使用上述建议可以帮助您避免这种遗留语法。
似乎应该在每个子项目的 build.gralde 中应用插件,而不是在根的“subprojects {”元素中应用。如这里
git clone github.com/bobbylight/RSyntaxTextArea.git
(插件: "biz.aQute.bnd.builder")
我有一个多项目build.gradle: https://gist.github.com/iva-nova-e-katerina/7c72399ede83b5f78dbae19582974f35
并且此脚本因错误而失败:
> Plugin with id 'com.github.blindpirate.osgi' not found.
为什么?也许 buildscript {} 应该在 allprojects 之外?如何正确添加 gradle 插件到多项目?
按照您的建议,您可以通过将 buildscript
移到 allprojects
之外来解决此问题。例如
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.github.blindpirate:gradle-legacy-osgi-plugin:0.0.4"
}
}
subprojects {
apply plugin: "com.github.blindpirate.osgi"
}
解释了这个工作的原因
For multi-project builds, the dependencies declared with a project’s buildscript() method are available to the build scripts of all its sub-projects.
当有人在官方论坛上提问 similar question 时,Gradle 也推荐了这种方法。
现在回答你的问题如何正确地将 gradle 插件添加到多项目?。有一个更好的方法来应用 gradle-legacy-osgi-plugin 插件,即使用插件 DSL,例如
plugins {
id "com.github.blindpirate.osgi" version "0.0.6"
}
使用插件 DSL 比您当前使用的 apply
语法有一些 significant advantages,因此通常是推荐的方法。
由于您在多项目设置中工作,插件 DSL 将与您当前使用的 subprojects
语法不兼容。我建议采用以下方法之一:
- 在有版本的根项目中应用插件,然后在没有版本的子项目中应用插件。使用
apply false
来避免插件被应用到根项目。 docs 有一个完整的例子。
plugins {
id "com.github.blindpirate.osgi" version "0.0.6" apply false
}
- 创建一个 convention plugin 并将其应用于每个子项目
不鼓励使用 allprojects
和 subprojects
语法,因为它会将项目耦合在一起,从而导致并行构建执行等功能出现问题。使用上述建议可以帮助您避免这种遗留语法。
似乎应该在每个子项目的 build.gralde 中应用插件,而不是在根的“subprojects {”元素中应用。如这里
git clone github.com/bobbylight/RSyntaxTextArea.git
(插件: "biz.aQute.bnd.builder")