我正在开发一个图书馆。它不是通常隐藏依赖项,而是在编译时下载二进制文件,重新定位它们,然后将它们加载到类路径中。但是,问题是如果我重新定位在运行时下载的 JAR,我还需要重新定位我的库路径以便将路径同步在一起。
例如,如果我的依赖项之一是:uk.co.caprica.vlcj
,并且我将该特定的 jar 依赖项重新定位到com.github.pulsebeat02.vlcj
,我还需要将该重新定位到我自己的项目中。
我尝试使用该shadowJar
任务。
- 我的父模块名为
minecraftmedialibrary-parent
. - 我的主要 API 模块名为
minecraftmedialibrary-api
. - 我也有单独的模块,每个模块代表不同的抽象/实现。
- 我会将这些抽象和 API 组合在一起形成一个
minecraftmedialibrary
模块。 - 对于测试,我会使用一个名为 的沙盒模块
deluxemediaplugin
,它测试代码(并且依赖于模块minecraftmedialibrary
)。
运行 shadowJar 时,我注意到-all
构建文件夹中的 jarminecraftmedialibrary
具有正确的重定位依赖项,其中所有包名称都已正确更改。但是,对于我的deluxemediaplugin
模块,当它使用该库时,会导致大量没有类定义的异常。更仔细地查看沙盒 jar,似乎重新定位的路径不会从库中携带(并且包名称与原始路径相同)。以下是一些显示问题的图像(来自 JD-GUI):
有谁知道允许重新定位的路径保留在库代码中而不是离开原始路径的可能解决方案?