簡體   English   中英

如何將嵌入式碼頭配置為使用可執行 jar 中的戰爭文件作為資源

[英]How do I configure embedded jetty to used war file in executable jar as resource

我有一個可執行的 jar ,里面有一個war文件。 運行 jar 會提取 war 文件並使用webAppContext.setWar(warFile)創建一個 WebAppContext。 盡管這可行,但似乎webAppContext.setWarResource(warResource)應該可以工作。 我已經嘗試使用new PathResource("file.war")創建資源,該資源顯示類似“jar:file:/Users/.../jetty-1.0.0-jar-with-dependencies.jar./文件.war” 聽起來很有希望和傳統,但是當我嘗試它時,我得到"java.lang.IllegalArgumentException: not file: scheme" 我真的必須提取戰爭文件還是有竅門?

那將是一個嵌套的 jar 內容參考,沒有 Java 程序可以做到這一點。

選項 1:改為使用實時戰爭(又名可執行戰爭)。

這將是一個戰爭文件,如果您願意,可以按傳統方式部署,但也可以從 java 命令行獨立使用(如果需要,它將啟動它自己的服務器)。

示例項目由 Eclipse Jetty 項目維護,位於... https://github.com/jetty-project/embedded-jetty-live-war

注意:實戰概念的靈感來自 Jenkins 項目及其實戰所做的工作。

選項 2:完全消除 JAR 中的 WAR 文件層

不要 package 將 JAR 中的 WAR 內容作為filename.war ,考慮將其用作分解的 WAR(或 war 目錄)。

只需將 WAR 解壓到 JAR 文件中某個安全的地方(如/META-INF/webapps/<app-id>/ ),然后在 JAR 文件中引用該目錄位置。

選項 3:完全消除對 WAR 概念的需求

這是最受歡迎的第一選擇。

您將 WAR 文件解構為ServletContextHandler並配置ServletsFilters ,這也消除了對注釋掃描/字節碼掃描(這很復雜)之類的需求,您也不必為嵌套/隔離類加載器(您的 uber JAR 文件包含運行 webapp 所需的所有類和下游依賴項),這種方法肯定會加快您的啟動時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM