java - 在没有 Maven jetty 的情况下从命令行运行 war

标签 java maven jetty

我试图将一个开源软件放入 docker 容器( https://github.com/att/XACML )中,但在这个容器中我无法使用 maven。运行此服务的文档说要使用 mvn jetty,它工作得很好,但为了将其放入容器中,我不想包含构建步骤(maven)。

相反,我想要一种编译 war 的方法,这样我就可以将 war 复制到容器中并从那里执行它。

我尝试了很多尝试,让 war 在没有 Maven Jetty 的情况下运行,但没有一个成功。

  1. java -jar/路径/到/jar 没有主要 list 属性错误。没有主类,它扩展了一个 HttpServlet

  2. 使用 jetty-runner 当我通过命令行使用 jetty-runner 启动 war 时,我没有收到任何错误,但它启动到一个显示文件目录的页面,而不是实际的项目。

  3. 制作一个“uber-jar”来打包所有依赖项 与 1 相同的问题,得到一个无主要 list 问题。

如果有帮助,我可以包含更多代码(pom 文件等),但如果不需要,我不想添加太多。我对java项目的打包和部署方式非常不熟悉,所以我很难弄清楚需要做什么。

谢谢!

最佳答案

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

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

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

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

The name ROOT.war is special, and will deploy your webapp in the "root" context path of "/"

构建图像

如果你像这样构建它......

$ 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 基地

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

关于java - 在没有 Maven jetty 的情况下从命令行运行 war ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57714659/

相关文章:

java - OSGi:如何知道 bundle 是否已更新

java - IntelliJ 目标字节码还原

java - Java 中素数算法的时间复杂度

java - 即使一切都在Eclipse中运行,我的程序也不会通过命令行编译

java - ubuntu设置java home环境变量错误

java - maven父子多模块项目

java - 在 Jetty Web 服务器中管理共享库

java - 使用 Jetty : URI is too large >8192 增加限制

java - 如何在 web.xml 中创建多个通配符 url 模式?

java - Libgdx 单元格水平对齐