Gradle、shadowJar:在任务内使用重定位

luc*_*uta 3 gradle gradle-shadow-plugin

我有以下任务:

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/**',
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

relocate 'com.myCompany.project.event.', 'com.myCompany.relocated.project.event.'
Run Code Online (Sandbox Code Playgroud)

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

小智 6

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

apply plugin: 'com.github.johnrengelman.shadow'
Run Code Online (Sandbox Code Playgroud)

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

shadowJar {
    relocate 'com.myCompany.project.event', 'com.myCompany.relocated.project.event'
}
Run Code Online (Sandbox Code Playgroud)

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

assemble.dependsOn shadowJar
Run Code Online (Sandbox Code Playgroud)

这将确保在 gradle 构建期间在 assemble/build 任务之前触发 Shadow jar 任务。

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

更多信息可以参考ShadowJarUserGuide