在JOGL中,有许多用于不同OS x拱组合的原生jar。如果你不使用java.library.path,JOGL有几个自己的机制来加载正确的机制,并支持一种“胖罐”布局。
在胖jar布局中,任何本机库都需要位于子目录./natives/os.and.arch/中。但是,由于本机jar本身没有任何内部布局,因此类似命名的so / dylib / dll文件会碰撞最终jar中的平面层次结构。
据我所知,我认为我不想与任何给定的MergeStrategy重复删除,因为只有在发生冲突时才会调用它。每个JOGL的本机库加载器都必须使用布局 - 我想在每个时间调用。有没有一种机制可以让我映射某些jar - > sbt-assembly中的前缀/带/ path?
jogl-all-2.1.3-natives-android-armv6.jar是通过依赖项引入的。
$ jar -tf jogl-all-2.1.3-natives-linux-amd64.jar
META-INF/MANIFEST.MF
libjogl_mobile.so
libnewt.so
我想在最后一个罐子里找到这个:
./natives/
./natives/linux.and.amd64/
./natives/linux.and.amd64/libnewt.so
./natives/linux.and.amd64/libjogl_mobile.so
答案 0 :(得分:1)
据我所知,我认为我不想与任何给定的MergeStrategy重复删除,因为只有在发生冲突时才会调用它。每个JOGL的本机库加载器都必须使用布局 - 我想每次都调用它。
每次调用所有合并策略。 MergeStrategy.deduplicate
,这是大多数文件的默认策略,只有在发生冲突时才会生效。
MergeStrategy.rename
每次都会通过附加jar名称来重命名文件。
是否有一种机制可以让我映射某些jar - > sbt-assembly中的前缀/带/ path?
没有开箱即用的策略,但您可以定义类似于MergeStrategy.rename
的自定义策略。
答案 1 :(得分:0)
按照此规则,Xerxes解释here。然后不再有任何碰撞的风险。 official JogAmp forum是一个更好的地方,可以询问有关所有JogAmp API的问题。如果您不遵循我的建议,GlueGen将无法提取和加载正确的本机库。在您的情况下,natives / linux-amd64是正确的,而natives / linux.and.amd64则不是。