Java 在SBT中,可以自动命名mangle私有包吗?

Java 在SBT中,可以自动命名mangle私有包吗?,java,scala,jar,versioning,sbt,Java,Scala,Jar,Versioning,Sbt,考虑使用特定版本的jar实现方法的常见情况,但不在公共或受保护的API中公开来自该jar的任何类型(仅在私有方法的方法签名中) 现在,我想要的是通过名称自动编译时链接此代码,将原始包名称弄乱,并在SBT内生成的代码中替换它(同样:我想向SBT添加一个插件,或在build.SBT中添加一个在每个SBT编译时执行此操作的设置) 这样做的目的是避免类路径错误,因为具有相同包/类名的类有多个可能不兼容的版本。注意:在我上面描述的情况下,内联或这个名称损坏应该总是有效的,并且允许一个侧步版本地狱(以更大的

考虑使用特定版本的jar实现方法的常见情况,但不在公共或受保护的API中公开来自该jar的任何类型(仅在私有方法的方法签名中)

现在,我想要的是通过名称自动编译时链接此代码,将原始包名称弄乱,并在SBT内生成的代码中替换它(同样:我想向SBT添加一个插件,或在build.SBT中添加一个在每个
SBT编译时执行此操作的设置)


这样做的目的是避免类路径错误,因为具有相同包/类名的类有多个可能不兼容的版本。注意:在我上面描述的情况下,内联或这个名称损坏应该总是有效的,并且允许一个侧步版本地狱(以更大的罐子为代价)。

这听起来像是可以做的事情。存在一个异常,但它似乎没有得到积极维护


如果我要解决这个问题,就个人而言,我会寻找一个自定义类加载器来解决,而不是名称混乱。

听起来它可能是的一个用例?这就是OSGi常用的功能。OSGi对类加载器使用了巧妙的技巧,而不是名称弄乱,但它实现了相同的效果。我不知道有什么方法可以从maven shade插件中实现sbt等价的类重新定位:Jarjar:看起来正是我想要的(使用重命名规则),但我没有看到sbt插件或如何实现这一点的示例。请解释“就个人而言,我希望使用自定义类加载器”ProGuard是字节码“丑八怪”,而不是mangler。mangler的目的严格来说是为了使多个版本兼容,而不是加速或混淆。有关定义,请参阅