我有一个依赖于Java库的clojure项目,当它包含在uberjar中时,它不能工作。(它需要在不同的JAR文件中使用相同文件名的不同XML描述符。)
我在使用Docker和leiningen时发现的一切都依赖于构建和打包一个uberjar。这也是我到目前为止构建所有clojure Docker镜像的方式。
有没有什么leiningen插件能够像io.Fabric 8/ Docker -maven- plugin那样使用几个jar文件打包docker镜像?
发布于 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中。因此,仍然可以将其打包。
https://stackoverflow.com/questions/42004663
复制相似问题