Plugins 编写一个可以发布的buildSrc Gradle插件

Plugins 编写一个可以发布的buildSrc Gradle插件,plugins,gradle,Plugins,Gradle,我正在为我的公司编写一个定制的Gradle插件,以帮助我们进行产品的集成测试。我的团队希望在主产品构建中使用插件(就像“buildSrc”插件一样),但也需要将插件作为工件发布,以便其他团队与我们的产品集成使用 如果我尝试将其作为独立插件包含在设置.gradle文件中,然后将其作为依赖项包含在buildscript中,则显然不起作用,因为buildscript块首先被解释 我还尝试从buildscript中运行另一个构建,如下所示: buildscript { def connection

我正在为我的公司编写一个定制的Gradle插件,以帮助我们进行产品的集成测试。我的团队希望在主产品构建中使用插件(就像“buildSrc”插件一样),但也需要将插件作为工件发布,以便其他团队与我们的产品集成使用

如果我尝试将其作为独立插件包含在
设置.gradle
文件中,然后将其作为依赖项包含在buildscript中,则显然不起作用,因为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'
  }
}
这导致插件被构建并放置在本地Maven repo中,但随后初始Gradle构建直接失败,因为它无法解析新构建的归档文件。如果我再次运行它,它会工作。我不理解这种行为


用这种方法我可能会陷入困境。有没有一种方法可以让这项工作不那么“黑”呢?

我发现了一种黑方法来完成这项工作:将插件符号链接到buildSrc(至少在*nix上)


项目目录
project/settings.gradle
project/gradle\u plugins/settings.gradle
project/gradle\u插件/build.gradle
我解决这个问题的方法如下:

使用
buildSrc/myPlugin/。
在我的构建过程中,我调用
/gradlew-b buildSrc/myPlugin/build.gradle uploadArchives
(或发布maven工件所使用的任何任务)


由于必须将gradle插件添加到根项目的运行时依赖项,此步骤将失败。所以我用一个试抓来围住它。我觉得这并不完美,但似乎很管用。

唯一非黑客的方法是为插件创建一个单独的Gradle版本。是的,没错。您应该创建一个单独的项目,并单独维护它。然后将插件发布到可供公司所有项目访问的repo。使用它不会有任何问题。有没有一种方法可以让它成为一个buildSrc风格的插件,然后和其他项目工件一起部署?我仍在努力学习Gradle并说服我的团队离开Maven。不,这没有得到官方的支持。
project/
  buildSrc/ -> gradle_plugins/
  gradle_plugins/
    pluginA/
    pluginB/
    ...
    build.gradle
    settings.gradle
  ...
  build.gradle
  settings.gradle
include 'gradle_plugins:pluginA'
include 'gradle_plugins:pluginB'
...
include 'pluginA'
include 'pluginB'
...
...
rootProject.dependencies {
    runtime project(path)
}
...