加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Embedded Jetty:如何使用包含在Jetty启动的.jar中的.

发布时间:2020-12-14 19:22:37 所属栏目:Java 来源:网络整理
导读:我正在尝试生成一个包含main()的.jar,它将启动Jetty. 我的问题是我希望Jetty加载的.war包含在同一个.jar中. 我已经能够创建包含.war的.jar: 在POM.xml中: executable-jar-assembly.xml: 在Jetty中设置战争的代码: handler.setWar("myApp.war"); 我也尝试

我正在尝试生成一个包含main()的.jar,它将启动Jetty.

我的问题是我希望Jetty加载的.war包含在同一个.jar中.

我已经能够创建包含.war的.jar:

在POM.xml中:


executable-jar-assembly.xml:

在Jetty中设置战争的代码:

handler.setWar("myApp.war");

……我也尝试过:

URL res = Server.class.getResource("myApp.war");
handler.setWar(res.toExternalForm());

……和:

URL res = Thread.currentThread().getContextClassLoader().getSystemResource("myApp.war");
handler.setWar(res.toExternalForm());

但没有任何作用!

使用最后一个示例代码启动Jetty,服务器似乎正确启动但没有请求工作.配置显然是错误的.

我知道有一些变通方法可以使.war本身可执行,但我想在.jar中创建“.war”.

知道如何配置.war吗?

最佳答案
我在2009-10赛季为一个特定的应用程序玩了很多.

我发现的问题是,当你在jar中嵌入一个war时,URI最终会成为那些无法使用默认jar:uri处理程序试图访问war文件的URI.

我找到了许多解决方案:

>告诉jetty将war文件解压缩/爆炸到临时目录中
>实现自己的URI处理程序(这是一个有趣的练习,但如果你需要自己支持代码,我不建议这样做)
>使war文件成为可执行的war文件,例如jenkins使用的相同类型的技巧.为此,您可以使用war文件覆盖jetty服务器类和主类.然后你只需将jetty指向jar文件本身作为war文件. Jetty并不关心文件名不以.war结尾

所有三个人都在Jetty 7上为我工作.我怀疑情况将保持不变.

最后我选择了选项3.它最简单,不会在用户系统上留下临时文件,并且启动速度最快.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读