我们有一个 Web 应用程序(用 java 编写,在 tomcat 中运行,仅部署在我们自己数据中心的几台服务器上 - 未重新分发)。我的任务是将我们的 webapp 依赖的第三方 jar 文件之一更新到最新版本。我们将当前版本的第三方库称为 foo1.jar,将新版本称为 foo2.jar。
我被要求编写使用新 jar 文件的代码,同时保留使用旧 jar 文件的现有代码。我们希望能够轻松地来回切换,以防万一我们认为升级存在问题。
问题是新版本与我们当前使用的版本不兼容。一些类和函数已经被删除,一些已经改变了签名等等。但是,很多类和函数没有改变。这意味着由于名称冲突,我们不能简单地将两个 jar 文件部署到我们的 lib 目录。
处理此问题的一种方法是将类重新定位到新包中。这个问题和答案中有一篇很好的文章,解释了如何使用JarJar 工具来执行此操作。
我提出的解决方案是将类从 com.foo 重新定位到 com.mycompany.com.foo1。我想从 foo1.jar 开始并生成 foo1-modified.jar,其中包含原始内容,但重新定位了指定的类。然后我会用 foo2.jar 做一些非常相似的事情,并部署两个修改后的 jar 文件。
但是,有人建议我应该使用 Maven Shade 插件而不是 JarJar 进行调查。(我以前从未使用过 Maven 或任何其他工具,所以请原谅我的无知。)Shade 似乎主要是为了解决一个稍微不同且更复杂的问题(关于将您的应用程序及其依赖项打包成一个jar 文件),但我想知道它是否可以满足我的需求。到目前为止,我还没有看到如何做到这一点的例子,但我想知道 Shade 是否适合这项任务?