在 jar 中导出 Gradle 个子项目而不将其添加到依赖项

Export Gradle subproject in jar without adding it to dependencies

我有一个包含 3 个子项目的 Gradle 项目:core1_131_141_131_14 取决于 core 项目,但最终构建必须在 core 项目上完成,我想包括 1_131_14 在罐子里。 1_131_14 子项目的 dep 不在 core 子项目中。

实际上,我使用sourceSets来包含1_131_14项目的源文件,但事实是子项目中存在不存在的依赖项在 core 子项目中,并且我不能在 core 子项目的依赖项中使用 apiElements,因为如果我进行循环导入,我就会卡住。

其实我用的是这个:

sourceSets {
    main {
        java {
            srcDirs 'src', '../1_13/src', '../1_14/src'
            resources {
                srcDir 'resources'
            }
        }
    }
}

但是因为核心子项目中不存在库,所以构建失败。 我明确指出我只在编译时需要库,而不是在运行时。我也无法将库添加到 core 子项目,因为子模块使用同一库的不同版本。核心模块只是在这里路由是否应该使用一个或另一个包。

最简洁的方法是将 1_131_14 使用的通用逻辑提取到新项目(例如 common)并添加 1_131_14 作为对核心项目的真正依赖。

你当然可以破解“使用子项目的依赖项作为核心项目的依赖项”之类的东西,但这样的破解通常会在以后造成更多麻烦。

继续搜索一段时间后,我找到了使用 Gradle 任务来完成我想要的事情的方法。

实际上,我创建了一个任务来合并不同模块的所有 jar 文件:

task buildPlugin(type: Jar, group: 'build') {
    // Change the archive name and include all outputs of build of modules
    archiveFileName = "${rootProject.name}.jar"
    from getRootProject().allprojects.findAll().sourceSets.main.output

    // Delete the old jar of the core module, to keep only the finally build jar file
    doLast {
        var oldJar = new File(project.buildDir, "libs/" + project.name + "-" + project.version + ".jar")
        if (oldJar.exists()) {
            oldJar.delete()
        }
    }
}