简体   繁体   中英

running war from command line without maven jetty

I am trying to put a piece of open source software in a docker container ( https://github.com/att/XACML ) but in this container I can not use maven. The documentation for running this service says to use mvn jetty, which does work fine, but in order to get this in a container I don't want to include a build step (maven).

Instead, I'd like a way to compile the a war, so I can copy just the war into the container and execute it from there.

I have tried many attempts to get the war running without maven jetty but none of them work.

  1. java -jar /path/to/jar no main manifest attribute error. There is no main class, it extends an HttpServlet

  2. using jetty-runner when I launch the war with jetty-runner through the command line I do not get any errors, but it boots up to a page showing the directory of files, and not the actual project.

  3. Making an 'uber-jar' to package all deps same issue as 1, get a no main manifest issue.

I can include more code if that would be helpful (pom files etc), but I don't want to add too much if it is unneeded. I am super unfamiliar with how java projects are packaged and deployed, so I am having a difficult time figuring out what needs to be done.

Thanks!

Minimal Dockerfile to work with your webapp / war file is ...

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

This uses the official jetty docker image at
https://hub.docker.com/_/jetty

Managed at
https://github.com/eclipse/jetty.docker

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

Building Image

If you build it like this ...

$ docker build -t stackoverflow/jetty:latest .

Running Image

Interactively (so you can the logs)

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

As Daemon

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

The server will be available on port 80 of the machine you ran the docker run command on.

Configuring Jetty Base

If you need to configure the jetty image you can use any of the standard start.jar commands.

Example:

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/

How This Works Without Maven

See the official image details ...

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

The key commands are ...

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM