我有一个生成 .war 文件的 Maven 项目。
我想将 maven 配置为生成一个可执行 jar,该 jar 嵌入了一个 servlet 容器(jetty、tomcat 或其他)以及我的 war 应用程序,并生成一个可以使用以下命令运行我的 web 应用程序的可执行 jar:
java -jar mywebapp.war
是否有一个 Maven 插件来获取这样的工件?
目前我正在使用jetty-runner运行我的应用程序的测试版本,这对于测试来说非常令人满意,但对于重新分发来说不如它是一个可执行的战争(就像在 jenkins 中)那样方便。
更新
@jesse-mcconnell:我不想更改我的 Web 应用程序中的一行(除了 pom.xml)来实现结果。只需以不同的方式打包我的战争,并使其可在选择的应用服务器下部署,并且能够将其作为可执行战争运行。
一个完美的解决方案还应该让我能够选择嵌入哪个应用服务器,还可以指定可执行文件本身中包含的所有需要的配置文件。
@khmarbaise:我知道 jenkins,我很久以前就检查过代码,它使用 winstone servlet 容器,并将 Main.class 放入可从 http 访问的战争中(我认为这是错误的)
一个完美的解决方案可能会引发一场包含以下内容的战争:
├── META-INF
│ └── MANIFEST.MF (Main-Class: WEB-INF.container.classes.Main)
└── WEB-INF
├── web.xml
├── classes
├── lib
└── container
├── lib (jetty.jar/tomcat.jar/whatever.jar)
├── etc (configuration files for the container)
└── classes
└── Main.class
- Main.class 应该使用 etc 配置作为默认配置,但能够在命令行(端口、上下文等)覆盖公共参数或指定新配置。
- Main.class 应该能够从容器内部加载容器 jar 和配置(或提取到 tmp.dir 中)并启动应用服务器。
这就是我要做的。
最后,您有一个正常的战争,可以部署在任何应用服务器中,并能够以独立的方式运行。