如何使用SBT为库构建分层JAR文件?

如何使用SBT为库构建分层JAR文件?,sbt,Sbt,我在一个图书馆工作,需要一些依赖项。 为了便于部署,我想创建一个包含所有内容的JAR文件,包括依赖项 我已经尝试过sbt assembly——这是可行的,但由于法律原因,这可能是不可取的,因此我正在寻找一种解决方案,其中生成的JAR文件中包含原始JAR文件,并且在MANIFEST.MF中设置了类路径条目,这样客户机类就可以将这个“嵌套JAR文件”添加到它们的类路径中 这样的事情可能吗?sbt one jar几乎可以满足我的需求,但只适用于可执行文件——我的产品将生成一个库,所以这不是一个完美的选

我在一个图书馆工作,需要一些依赖项。 为了便于部署,我想创建一个包含所有内容的JAR文件,包括依赖项

我已经尝试过sbt assembly——这是可行的,但由于法律原因,这可能是不可取的,因此我正在寻找一种解决方案,其中生成的JAR文件中包含原始JAR文件,并且在MANIFEST.MF中设置了类路径条目,这样客户机类就可以将这个“嵌套JAR文件”添加到它们的类路径中

这样的事情可能吗?sbt one jar几乎可以满足我的需求,但只适用于可执行文件——我的产品将生成一个库,所以这不是一个完美的选择


到目前为止,我一直在使用SBT,一个SBT插件将是最容易使用的,因为它是相当多的工作转换成maven或gradle或。。。现在。

在仔细考虑了类查找的工作原理之后,我们决定放弃这个实验。 基本上,类是由类加载器实例加载的,应用程序的标准类加载器使用固定的策略来查找JAR文件或目录中的类。 似乎要允许一个库位于分层JAR文件中,我们还必须为该库的用户(即库客户端)提供一个特殊的类加载器,以便我们的客户端可以从分层JAR加载所有需要的类

这是太多的工作了,不值得这么做——层次化JAR的整个概念只是为了简化部署而引入的,而必须处理自己的类加载器将使这种简化无效


简言之,这是可能的,但可能不值得付出努力。

什么是法律依据?从技术上讲,在jar或.class文件中是否有jar实际上没有区别。毕竟,jar只是一个虚拟文件系统。这个库的许可证说我们不允许修改它。现在还不清楚重新包装是否算作“修改”——我们只是想保持防水。