当前位置: 首页 > 知识库问答 >
问题:

如何将自定义Gradle插件放在另一个项目构建类路径上?

路扬
2023-03-14

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

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

我想将这个插件作为一个项目包含在我的多项目构建中,而不是将其发布到repo以便于开发。

这个插件有3个项目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文件创建插件并将它们包含在我的主构建中,因为我需要它们预编译,但是当build.gradle在那里运行时,我似乎找不到一种方法将它们放在Project A的类路径上。这可能吗?什么是正确的解决方案?

我用的是gradle 7.3

共有1个答案

柴博
2023-03-14

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

包括来自另一个目录的Gradle插件在测试Gradle插件部分中有记录。

因此,如果您有一个共享构建逻辑项目,该项目提供了一个ID为my的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-gic

// my-projects/project-a/settings.gradle.kts

rootProject.name = "project-a"

pluginManagement {
  includeBuild("../shared-build-logic")
}

现在,只要shading-build-logic正确提供了Gradle插件,在Project-a中您就可以引用该插件。

// my-projects/project-a/settings.gradle.kts

plugins {
  id("my.shared-build-logic")
}
 类似资料:
  • 我的Gradle项目的结构如下: 通常,要获取 文件夹的绝对路径,我只需在根 文件中执行即可。 但不幸的是,如果您从项目目录外部运行gradle脚本,例如执行如下操作,则此方法不起作用: 使用上一个命令,gradle 是在项目的父级中查找 目录,因为我从那里开始编写脚本。 是否有方法获得项目的绝对路径,即构建位置。gradle是,即使您从另一个目录启动脚本?或者有没有其他方法来获取脚本所在文件夹中

  • 所以我有一个多项目设置,看起来像这样

  • 下面的这些代码可以帮助您通过CSS文件和SCSS文件,创建和编译 CSS 和 JS 文件的source-maps。 安装依赖 为了运行编译和压缩任务,你必须安装 node 和 npm。 命令行 // (Optional) Install Gulp module globally npm install gulp -g // Install fullpage's build dependen

  • 在另一个项目中,我使用/应用这个插件: 但是如何从MyGradlePlugin.groovy中的apply方法中迭代公共依赖项并打印它们的坐标(artifactId、groupId、version)?

  • 我写了一个gradle插件,我只想在我自己的项目中使用。下面是一个简化的文件结构: 我通过引用jar文件将插件添加到模块 一开始效果很好,但有一个问题。如果您清理项目并尝试再次构建它,它将失败,因为'。/plugin/build/libs/payload-plugin-0.0.1-SNAPSHOT。jar不再存在,它将不会尝试重建插件模块,因为这将被视为配置错误。 我尝试只使用gradlew:so

  • 我有一个build.gradle文件,比如: 当我使用STS Gradle插件将项目导入Eclipse时,只有compile conf依赖项显示在“Gradle dependencies”类路径容器下。 是否也有可能让提供的conf被STS插件拉入?