Gradle 插件 - 对主项目中也使用的 Java 模块的依赖

问题描述 投票:0回答:1

我希望我的 gradle 插件依赖于一些可以在 gradle 插件内部以及 android 库内部使用的通用代码。

有没有办法在 gradle 插件和 android 库之间共享纯 java/kotlin 代码?

当我尝试将模块添加到 gradle 插件时,出现“无法在项目中找到”错误...我尝试了

includeBuild
include
的不同组合,但它们没有解决问题...

示例:

Gradle 插件:

plugins {
    `kotlin-dsl`
    `java-gradle-plugin`
    `maven-publish`
}

dependencies {
    // fails
    implementation(project(":Library:Plugin:Shared"))
    //implementation(project(":library:plugin:shared"))
}

图书馆模块:

plugins {
    id("com.android.library")
    id("kotlin-android")
    id("kotlin-parcelize")
    id("maven-publish")
}

android {

    // ...
}

dependencies {
    api(project(":Library:Plugin:Shared"))
}

共享模块:

repositories {
    mavenCentral()
}

plugins {
    id("org.jetbrains.kotlin.jvm")
    `java-library`
    `maven-publish`
}

dependencies {
}

settings.gradle.kts:

pluginManagement {
    includeBuild(File("library/plugin/gradle"))
}

include(":Library:Plugin:Shared")
project(":Library:Plugin:Shared").projectDir = file("library/plugin/shared")

include(":Library:Plugin:Gradle")
project(":Library:Plugin:Gradle").projectDir = file("library/plugin/gradle")

gradle gradle-plugin
1个回答
0
投票

您需要一个包含的构建来在项目的构建代码和应用程序代码之间共享代码。

我假设您正在

buildSrc
项目中编写插件,这实际上是默认情况下项目中的一个特殊包含构建(您可以在其中编写类插件的唯一其他位置是另一个包含构建,在这种情况下,您已经有一个包含的版本可用于编写您的库)。

以下是一些使包含的构建正常工作的分步说明。

  1. 设置您包含的构建项目:

    • 在主项目文件夹下放置一个新文件夹。称呼它,说,
      myIncludedBuild
    • 给它自己的
      settings.gradle.kts
      文件。
    • 给它一个
      build.gradle.kts
      文件,然后在其中应用 Java 库插件并给项目一个组。
    plugins {
       `java-library`
    }
    
    group = "myIncludedBuildGroup"
    
  2. myIncludedBuild/src/main/java

    中写入您的共享代码
  3. 将构建包含在您的主

    settings.gradle.kts
    中:

    includeBuild("myIncludedBuild")
    
  4. 现在,您可以将其作为依赖项包含在

    buildSrc
    中,假设这是您编写插件的位置:

    dependencies {
        implementation("myIncludedBuildGroup:myIncludedBuild")
    }
    
  5. 此外,包含的构建库将可作为主构建中任何项目的依赖项,也使用 Maven 坐标:

    dependencies {
        implementation("myIncludedBuildGroup:myIncludedBuild")
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.