当前位置: 首页 > 知识库问答 >
问题:

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

简俊楚
2023-03-14

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

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

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

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

共有1个答案

应子真
2023-03-14

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

这是太多的工作,不值得——分层JAR的整个想法只是为了简化部署,而必须兼顾自己的类加载器将使这种简化无效。

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

 类似资料:
  • 我正在使用SBT(在IntelliJ IDEA中)构建一个简单的Scala项目。 我想知道什么是最简单的方法来建立一个Uber JAR文件(又名胖JAR,超级JAR)。 我当前使用的是SBT,但当我将JAR文件提交到Apache Spark时,我得到以下错误: 线程“main”java.lang.SecurityException中的异常:清单主属性的签名文件摘要无效 或在编译期间出现此错误: j

  • 问题内容: 我有一个文件夹结构 当我运行以下命令“ jar cvf asd.jar * .class”时,它将为jar提供所有类文件。但是没有生成文件夹结构。所有的类文件都必须在“ com.cdy / ws”下,但是所有的类都在同一级别的META-INF中。谁能告诉我生成包结构的命令是什么? 谢谢 问题答案: 您需要在文件的 根目录 开始创建JAR 。 因此,例如: 假定包含该目录。 仅供参考,如

  • 我还有另一个带有SDK依赖项的lib(一个插件,假设模块B) 所以在我的项目中,有三个模块:SDK(A)、demoApp和插件(B) 现在我需要在jar文件中分发我的SDK和/或插件,以便人们可以在他们的项目中使用它 编辑:为了澄清,我加了一封信 我需要一个用于的jar文件 B需要A才能运行(依赖项) 我需要一个用于b的jar文件

  • 问题内容: 我正在使用gradle构建的开源项目。我想生成一个(project)-sources.jar文件,可以将其加载到我的IDE(IntelliJ IDEA)中并通过该项目进行调试。我知道如何生成文件(如果可以生成的话)。 我浏览了该项目可用的gradle任务,但没有一个可以生成source jar文件。 为该项目生成源jar文件的最简单方法是什么? 将源添加到包含已编译的类文件的jar文件

  • [info]将spark-core2.10发布到C:\users\s80035683.m2\repository\org\apache\spark-core2.10\1.1.0-Snapshot\spark-core2.10\1.1.0-Snapshot-javadoc.jar[info]将spark-core2.10发布到C:\users\s80035683.ivy2\local\org.apa

  • 问题内容: 我正在处理3层体系结构的PHP网站。 现在,我需要重新设计它以支持分布式n层体系结构。经过长时间的研究,我得出了这个解决方案:业务逻辑应分为表示层和纯业务逻辑层,以支持n层体系结构(用户界面,表示层,b.logic和数据层)。我决定只为演示使用РНР。在业务逻辑中,我想使用J2ЕЕ实现技术,而不是在PHP中实现它,因为J2EE可以提供更多基本的容器服务,这些服务对于业务逻辑,其健壮性,