为了账号安全,请及时绑定邮箱和手机立即绑定

在没有 Maven jetty 的情况下从命令行运行战争

在没有 Maven jetty 的情况下从命令行运行战争

汪汪一只猫 2023-06-28 16:17:43
我试图将一个开源软件放入 docker 容器(https://github.com/att/XACML)中,但在这个容器中我无法使用 maven。运行此服务的文档说要使用 mvn jetty,它工作得很好,但为了将其放入容器中,我不想包含构建步骤(maven)。相反,我想要一种编译战争的方法,这样我就可以将战争复制到容器中并从那里执行它。我尝试了很多尝试,让战争在没有 Maven 码头的情况下运行,但没有一个成功。java -jar /path/to/jar 无主清单属性错误。没有主类,它扩展了一个 HttpServlet使用jetty-runner 当我通过命令行与jetty-runner启动战争时,我没有收到任何错误,但它启动到一个显示文件目录的页面,而不是实际的项目。制作一个“uber-jar”来打包所有与 1 相同的问题,得到一个没有主要清单的问题。如果有帮助的话我可以包含更多代码(pom 文件等),但如果不需要的话我不想添加太多。我对java项目的打包和部署方式非常不熟悉,所以我很难弄清楚需要做什么。谢谢!
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

Dockerfile与您的 webapp / war 文件一起使用的最低限度是......

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

这使用https://hub.docker.com/_/jetty上的官方 jetty docker 镜像

管理于
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

该服务器将在您运行命令的计算机的端口 80 上可用docker run

配置 Jetty 基地

如果您需要配置 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"]


查看完整回答
反对 回复 2023-06-28
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信