簡體   English   中英

在沒有 Maven 碼頭的情況下從命令行運行戰爭

[英]running war from command line without maven jetty

我正在嘗試將一個開源軟件放入 docker 容器( https://github.com/att/XACML )中,但在此容器中我無法使用 maven。 運行此服務的文檔說要使用 mvn jetty,它確實可以正常工作,但是為了將其放入容器中,我不想包含構建步驟 (maven)。

相反,我想要一種編譯戰爭的方法,這樣我就可以只將戰爭復制到容器中並從那里執行它。

我已經嘗試了很多嘗試來讓戰爭在沒有 Maven 碼頭的情況下運行,但沒有一個奏效。

  1. java -jar /path/to/jar 沒有主清單屬性錯誤。 沒有主類,它擴展了一個 HttpServlet

  2. 當我通過命令行啟動與 jetty-runner 的戰爭時使用 jetty-runner 我沒有收到任何錯誤,但它啟動到顯示文件目錄的頁面,而不是實際項目。

  3. 制作一個 'uber-jar' 來打包所有與 1 相同的問題,得到一個沒有主要的清單問題。

如果有幫助(pom 文件等),我可以包含更多代碼,但如果不需要,我不想添加太多。 我非常不熟悉 java 項目是如何打包和部署的,所以我很難弄清楚需要做什么。

謝謝!

與您的 webapp/war 文件一起使用的最小Dockerfile是...

FROM jetty:9.4.18
ADD ROOT.war /var/lib/jetty/webapps/

這使用官方碼頭泊塢窗圖像
https://hub.docker.com/_/jetty

管理於
https://github.com/eclipse/jetty.docker

ROOT.war這個名字很特殊,它會將你的 webapp 部署在"/"的“root”上下文路徑中

建築形象

如果你像這樣構建它......

$ docker build -t stackoverflow/jetty:latest .

運行圖像

交互式(這樣您就可以查看日志)

$ docker run --interactive --tty --rm --publish 80:8080 stackoverflow/jetty:latest

作為守護進程

$ docker run --detach --publish 80:8080 stackoverflow/jetty:latest

服務器將在您運行docker run命令的機器的端口 80 上可用。

配置碼頭基地

如果您需要配置 jetty 映像,您可以使用任何標准的start.jar命令。

例子:

FROM jetty:9.4.18
WORKDIR $JETTY_BASE
RUN java -jar $JETTY_HOME/start.jar --add-to-start=jsp
ADD ROOT.war /var/lib/jetty/webapps/

在沒有 Maven 的情況下這是如何工作的

看官方圖片詳情...

https://github.com/eclipse/jetty.docker/blob/master/9.4-jdk11/Dockerfile

關鍵命令是...

WORKDIR $JETTY_BASE
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["java","-jar","/usr/local/jetty/start.jar"]

暫無
暫無

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

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