在插件 jar 中包含依赖类文件

时间:2021-01-25 02:12:07

标签: gradle gradle-plugin

我正在开发一个 Gradle 插件,它只是向项目添加一个任务来运行一个简单的 jvm 应用程序。插件和应用程序在同一个项目中,我希望最终只将一个二进制文件部署到插件门户。我对 maven 依赖管理的理解有点不稳定,但以下代码抱怨 Gradle 无法解析“dep”所需的工件。不过,我不需要它来从 Maven 存储库加载工件,因为我已将类文件复制到生成的插件 jar 中。

我已经尝试将 Maven 依赖项设置为一个空列表来覆盖,但这也无济于事。

我也尝试将 implementation 依赖项改为 runtimeOnly。这让我走得更远,但出于某种原因,它使后来的 Gradle 感到困惑。 Gradle 告诉我它找不到具有指定 ID 的插件。插件实现和它所依赖的应用程序的适当类文件在 jar 中。那么也许元数据文件配置错误? pom 对我来说看起来不错。

有没有更简单的方法可以将依赖项目的类文件直接包含到您的插件 jar 中?我错过了什么?

dependencies {
    implementation(project(":dep"))
    implementation(kotlin("stdlib-jdk8"))

    testImplementation("com.willowtreeapps.assertk:assertk-jvm:0.22")
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.6.0")
    testImplementation("org.junit.jupiter:junit-jupiter-engine:5.6.0")
    testImplementation("org.junit.jupiter:junit-jupiter-params:5.6.0")
}

gradlePlugin {
    plugins {
        register("plugin") {
            id = "plugin"
            implementationClass = "com.jzbrooks.plugin.PluginImpl"
        }

    }
}

tasks {

    withType<Jar> {
        dependsOn(configurations.runtimeClasspath)

        val sourceClasses = sourceSets.main.get().output.classesDirs
        inputs.files(sourceClasses)

        doFirst {
            from(configurations.runtimeClasspath.get().asFileTree.files.map(::zipTree))
            from(files(sourceClasses))
        }
    }

0 个答案:

没有答案
相关问题