我正在为我的公司编写一个自定义 Gradle 插件,以协助我们产品的集成测试。我的团队希望在主产品构建中构建和使用插件(就像“buildSrc”插件一样),但也需要将插件作为工件发布,供其他团队与我们的产品集成使用。
如果我尝试将它作为独立插件包含在settings.gradle
文件中,然后将它作为依赖项包含在 buildscript 中,它显然不起作用,因为首先解释 buildscript 块。
我还尝试从构建脚本中运行另一个构建,如下所示:
buildscript {
def connection = GradleConnector.newConnector()
.forProjectDirectory(file("${project.projectDir}/theplugin"))
.connect()
try {
connection.newBuild()
.forTasks('clean', 'build', 'install')
.run()
} finally {
connection.close()
}
repositories {
mavenLocal()
...
}
dependencies {
classpath 'com.company.product.gradle.theplugin'
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致插件被构建并放置在本地 Maven 存储库中,但随后初始 Gradle 构建直接失败,因为它无法解析新构建的存档。如果我再次运行它,它会起作用。我不明白这种行为。
我可能会用这种方法陷入困境。有没有办法以一种不那么“hacky”的方式来完成这项工作?
我发现了一种奇怪的方法来实现这一点:将插件符号链接到 buildSrc(至少在 *nix 上)。
project/
buildSrc/ -> gradle_plugins/
gradle_plugins/
pluginA/
pluginB/
...
build.gradle
settings.gradle
...
build.gradle
settings.gradle
Run Code Online (Sandbox Code Playgroud)
include 'gradle_plugins:pluginA'
include 'gradle_plugins:pluginB'
...
Run Code Online (Sandbox Code Playgroud)
include 'pluginA'
include 'pluginB'
...
Run Code Online (Sandbox Code Playgroud)
...
rootProject.dependencies {
runtime project(path)
}
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1353 次 |
最近记录: |