繁体   English   中英

sbt-assembly:从某些jar中提取文件的前缀

[英]sbt-assembly: prefix extracted files from some jars

在JOGL中,有许多用于不同OS x拱形组合的本机jar。 如果您不使用java.library.path,JOGL有几种自己的机制可以加载正确的机制,并且支持一种“胖子”布局。

在胖罐布局中,所有本机库都必须位于./natives/os.and.arch/子目录中。 但是,由于本机jar本身没有任何内部布局,因此类似命名的so / dylib / dll文件会碰撞最终jar中的平面层次结构。

据我所知,我不希望与任何给定的MergeStrategy重复数据删除,因为仅在发生冲突时才调用它。 每个JOGL的本机库加载器都必须使用该布局-我想每次都调用它。 有没有一种机制可以让我在sbt-assembly中映射某些jar-> prefix / with / 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

据我所知,我不希望与任何给定的MergeStrategy重复数据删除,因为仅在发生冲突时才调用它。 每个JOGL的本机库加载器都必须使用该布局-我想每次都调用它。

每次都调用所有合并策略。 MergeStrategy.deduplicate是大多数文件的默认策略,仅在发生冲突时才会生效。

例如,默认情况下应用于自述文件和许可证文件的MergeStrategy.rename每次都会通过附加jar名称来重命名该文件。

有没有一种机制可以让我在sbt-assembly中映射某些jar-> prefix / with / path?

没有开箱即用的策略可以做到这一点,但是您可以定义类似于MergeStrategy.rename的自定义策略。

只需遵循Xerxes 此处解释的规则即可。 这样就不再有碰撞的危险。 正式的JogAmp论坛是询问所有JogAmp API的好地方。 如果您不遵循我的建议,GlueGen将无法提取和加载正确的本机库。 在您的情况下,natives / linux-amd64是正确的,而natives / linux.and.amd64不是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM