我有一个带有war文件的可执行jar。运行jar将提取war文件,并使用WebAppContext从其中创建一个webAppContext.setWar(warFile)。虽然这是可行的,但似乎webAppContext.setWarResource(warResource)应该能工作。我尝试过使用new PathResource("file.war")创建一个资源,它显示了一个类似于new PathResource("file.war")的路径听起来很有希望,而且很传统,但是当我尝试的时候,我得到的是"java.lang.IllegalArgumentException: not file: when“”。我真的需要提取战争文件还是有诡计?
发布于 2020-07-08 20:06:34
这将是一个嵌套的jar内容引用,没有Java程序能够做到这一点。
选项1:使用实时war(也称为可执行的war).
这将是一个war文件,如果您愿意的话,传统上可以部署它,但也可以从java命令行单独使用它(如果需要的话,它将启动它自己的服务器)。
Eclipse项目在. https://github.com/jetty-project/embedded-jetty-live-war上维护一个示例项目
注:实战概念的灵感来自詹金斯项目和他们的实战。
选项2:完全消除JAR中的WAR文件层
不要将JAR中的WAR内容打包为一个filename.war,而是考虑使用它作为一个爆炸的WAR (或war目录)。
只需将WAR解压缩到安全的JAR文件中(如/META-INF/webapps/<app-id>/),然后在JAR文件中引用目录位置即可。
选项3:完全消除对WAR概念的需求(完全)
这是最受欢迎的第一选择。
您可以将WAR文件解构为配置好的ServletContextHandler和Filters,这也消除了诸如注释扫描/字节码扫描(这非常复杂)等事情的需要,您也不必纠缠嵌套/隔离类加载器(您的uber JAR文件包含运行webapp所需的所有类和下游依赖项),这种方法肯定会加快您的启动时间。
https://stackoverflow.com/questions/62800162
复制相似问题