首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用leiningen构建非uberjar Docker镜像

使用leiningen构建非uberjar Docker镜像
EN

Stack Overflow用户
提问于 2017-02-02 22:22:40
回答 1查看 329关注 0票数 1

我有一个依赖于Java库的clojure项目,当它包含在uberjar中时,它不能工作。(它需要在不同的JAR文件中使用相同文件名的不同XML描述符。)

我在使用Docker和leiningen时发现的一切都依赖于构建和打包一个uberjar。这也是我到目前为止构建所有clojure Docker镜像的方式。

有没有什么leiningen插件能够像io.Fabric 8/ Docker -maven- plugin那样使用几个jar文件打包docker镜像?

EN

回答 1

Stack Overflow用户

发布于 2017-02-10 10:13:24

无论何时打包(uberjar、war),创建的大文件都包含.class文件和目录结构。这些XML文件应该从哪里加载(类)?您可以尝试手动打包。毕竟(无论是uberjar、war还是jar)它只是一个zip文件。

当您确切地知道所需的布局时,SBT就足够灵活,可以确保您可以从许多输入jar文件中打包。不幸的是,lein插件会做一些事情,比如总是覆盖重复的内容,而且你不能控制打包行为。我记不清具体的不灵活之处,但我无法控制包装过程如何进行,做出了什么决定。

为了手动完成这项工作,我使用了一个叫Archive Manager的Linux,我发现它比我在Windows上使用的要好得多。手动操作可能就是您需要的全部操作。当然,SBT的缺点是您必须学习它,其中包括一些Scala。

它需要不同的

描述符,在不同的JAR文件中使用相同的文件名。

试想一下,您是否需要将不同jar中的每个文件的内容附加到uberjar中的一个文件中?你可以试一试。如果它工作正常,并且您需要经常打包,以至于每次手动创建和重命名zip文件都变得很痛苦,那么我相信SBT将是您最好的选择。

我必须将容器与原始jar文件打包在一起,然后在启动应用程序时在类路径中引用此jar

类加载器加载类而不是jars。容器的工作是将您提供给它的所有东西解包,例如.class文件、(超)jars、wars。任何从类路径动态加载的程序都是在加载类或资源(类似于.xml文件)。我认为.jar文件可以是一种资源,在这种情况下,您可以将jar文件放在uberjar中。因此,仍然可以将其打包。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42004663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档