如何在使用 Shadow 插件的同时重定向(Relocate)包名
以酒石酸菌的 NetMusic 模组为例,其 build.gradle 中有如下指令(有修改):
shadowJar {
dependencies {
include(dependency("com.googlecode.soundlibs:mp3spi:1.9.5.4"))
include(dependency("com.googlecode.soundlibs:jlayer:1.0.1.4"))
include(dependency("com.googlecode.soundlibs:tritonus-share:0.3.7.4"))
}
// 在打包时将 javazoom.jl 整体移动到 com.github.tartaricacid.netmusic.soundlibs.javazoom.jl
relocate 'javazoom.jl', 'com.github.tartaricacid.netmusic.soundlibs.javazoom.jl'
// 在打包时将 javazoom.spi 整体移动到 com.github.tartaricacid.netmusic.soundlibs.javazoom.spi
relocate 'javazoom.spi', 'com.github.tartaricacid.netmusic.soundlibs.javazoom.spi'
// 在打包时将 org.tritonus 整体移动到 com.github.tartaricacid.netmusic.soundlibs.org.tritonus
relocate 'org.tritonus', 'com.github.tartaricacid.netmusic.soundlibs.org.tritonus'
// 重定向并合并所有可能出现的 Service Provider 定义文件
// 在前置使用 Service provider 时必须使用此命令,否则运行时会出现问题
mergeServiceFiles()
}
// 指示 ForgeGradle 对 shadowJar 的产出进行重混淆
// ForgeGradle 会新建名为 reobfShadowJar 的任务来完成重混淆
reobf {
shadowJar {}
}
// 将重混淆产物作为 shadowJar 任务最终输出
shadowJar.finalizedBy('reobfShadowJar')
// 指示 Gradle 每次执行 build 任务时,必须执行 shadowJar 任务
build.dependsOn shadowJar