如何发布和使用依赖于本地项目的gradle插件?

时间:2019-02-22 16:50:06

标签: java gradle groovy build.gradle gradle-plugin

我正在创建gradle插件,该插件依赖于其他本地模块。它的一些gradle构建看起来像这样:

dependencies {
    compile gradleApi()
    compile project(":myDependencyProject")

}

publishing {
    publications {
        maven(MavenPublication) {
            groupId = 'org.my.gradle.plugin'
            artifactId = 'some-name'
            version = '1.0-SNAPSHOT'

            from components.java
        }
    }
}

gradlePlugin {
    plugins {
        jsonPlugin {
            id = 'org.my.gradle.plugin'
            implementationClass = 'my.implementation.class'
        }
    }
}

当我使用 gradle publishToMavenLocal 发布插件时,我尝试在另一个项目中使用该插件,但失败,并出现以下错误:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':my-project'.
> Could not resolve all artifacts for configuration ':my-project:classpath'.
   > Could not find org.my.gradle.plugin:myDependencyProject:1.0-SNAPSHOT.
     Searched in the following locations: ...

简单来说,它找不到myDependencyProject项目的依赖项。这就是为什么下一步我尝试创建一个胖jar并将其发布但又遇到了相同的错误(gradle插件的代码是相同的,除了我将from components java更改为artifact shadowJar)。 / p>

有人可以帮助我如何发布具有本地依赖项的gradle插件并在另一个项目中使用它?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我们最终使用Gradle shadow plugin将模块包含在published artifact中。

对我们而言重要的一件事是仅在其中包含本地库,以防止最终用户拥有某些库(例如Kotlin)的2个副本。所以我们filtered the dependencies

shadowJar {
   dependencies {
      include(dependency(':your-module-name:'))
   }
}