1

我有以下任务:

task myJar(type: Jar) {
    archiveName = 'myJar.jar'
    includeEmptyDirs = false
    destinationDir = rootProject.libsDir
    dependsOn compileJava

    manifest.attributes('Class-Path': '../lib/commons-lang-2.5.jar')

    into '/', {
        from compileJava.destinationDir
        include 'com/myCompany/project/util/order/**',
                'com/myCompany/project/event/**',
    }
}

我想将所有类从 com/myCompany/project/event/** 重新定位到 com/myCompany/relocated/project/event/** (以便某些应用程序使用我的 jar 并拥有 com.myCompany.project.event 包定义将避免任何可能的冲突)

我发现它可以使用影子插件来完成,我尝试添加

relocate 'com.myCompany.project.event.', 'com.myCompany.relocated.project.event.'

在这个任务下,但它似乎不起作用。有人知道我应该在哪里添加这一行吗?

4

1 回答 1

2

您可以通过将以下插件添加到您的 build.gradle 来实现此目的

apply plugin: 'com.github.johnrengelman.shadow'

添加此插件后,将以下代码添加到您的 build.gradle 文件中

shadowJar {
    relocate 'com.myCompany.project.event', 'com.myCompany.relocated.project.event'
}

添加后,为确保您的 ShadowJar 任务在构建之前运行,请在末尾添加此行

assemble.dependsOn shadowJar

这将确保在 gradle build 期间的 assemble/build 任务之前触发 shadow jar 任务。

在进行 Gradle 构建时,您应该看到所有包及其相应的依赖项从“com.myCompany.project.event”重定位到“com.myCompany.relocated.project.event”。

有关更多信息,您可以参考ShadowJarUserGuide

于 2019-05-25T15:08:20.387 回答