如何将定制Gradle插件在另一个项目构建类路径?



我有一个发布的gradle插件,看起来像这样:

|__root
|     |
|     |
|     |__java
|     |    |__SomeJavaClass.java
|     |    |__SomeJavaClass2.java
|     |
|     |__kotlin
|          |__MyPluginClass.kts
|          |__MyTaskClass.kts
|          |__Utils.kts   

我想把这个插件作为一个项目包含在我的多项目构建中,而不是将它发布到一个更容易开发的repo。

这个插件有3 Kotlin文件项目A正在使用。MyPluginClass。kts有我自己的插件类MyTaskClass。kts有我自己的任务类和Utils。KTS只包含kotlin函数。java类用于MyPlugin和MyTask。

它被放在项目A的build.gradle.kts类路径中

classpath("com.my:custom.plugin:version")

我想实现的一个非常简化的项目结构:

root
| 
|__Project A
|     |
|     |__build.gradle.kts
|     |__x.gradle.kts
|     |__y.gradle.kts
|     |__settings.gradle
|
|__Project build-logic
|     |
|     |__build.gradle.kts
|     |
|     |__java
|     |    |__SomeJavaClass.java
|     |    |__SomeJavaClass2.java
|     |
|     |__kotlin
|          |__MyPluginClass.gradle.kts
|          |__MyTaskClass.gradle.kts
|          |__Utils.gradle.kts   

我试图从那些kotlin文件创建插件,并将它们包含在我的主要构建中,因为我需要它们预编译,但我似乎找不到一种方法把它们放在项目a的类路径时构建。它正在运行。这可能吗?合适的解决方案是什么?

我使用gradle 7.3

你可以使用复合构建组合多个独立的Gradle项目。对于Gradle插件也是如此。

包含另一个目录的Gradle插件,请参见测试Gradle插件一节。

如果你有一个shared-build-logic项目,提供了一个ID为my.shared-build-logic的Gradle插件,并且你想在project-a中使用它。

my-projects/
├── shared-build-logic/
│   ├── src/
│   │   └── ...
│   ├── build.gradle.kts
│   └── settings.gradle.kts
└── project-a/
├── src/
│   └── ...
├── build.gradle.kts
└── settings.gradle.kts

那么你需要在你的project-aGradle设置文件中包含shared-build-logic

// my-projects/project-a/settings.gradle.kts
rootProject.name = "project-a"
pluginManagement {
includeBuild("../shared-build-logic")
}

现在,只要shared-build-logic正确地提供了Gradle插件,你就可以在project-a中引用这个插件。

// my-projects/project-a/settings.gradle.kts
plugins {
id("my.shared-build-logic")
}

终于想通了。我没有从构建逻辑中创建插件,而是将它们作为kotlin文件。因为它是一个单独的gradle项目,所以我可以构建项目并将项目a的类路径指向生成的jar文件,如

buildscript {
dependencies {
classpath(files("path.to.the.jar"))
}
}

这样我可以从项目a中访问方法和MyTask。

另一个问题是,我想应用MyPlugin像

plugins{
id("my-plugin-name")
}

不起作用,我猜是因为它是一个类。但现在,因为我有整个项目jar在我的构建类路径,我可以这样做:

apply<my-plugin-name>()

相关内容

  • 没有找到相关文章

最新更新