生成可执行web应用程序的Maven插件(war->;可执行jar war)
我有一个maven项目正在生成一个.war文件 我想将maven配置为生成一个可执行jar,该jar嵌入一个servlet容器(jetty、tomcat或其他)和我的war应用程序,并生成一个可执行jar,该jar可以使用如下命令运行我的web应用程序:生成可执行web应用程序的Maven插件(war->;可执行jar war),maven,web-applications,jetty,war,executable-jar,Maven,Web Applications,Jetty,War,Executable Jar,我有一个maven项目正在生成一个.war文件 我想将maven配置为生成一个可执行jar,该jar嵌入一个servlet容器(jetty、tomcat或其他)和我的war应用程序,并生成一个可执行jar,该jar可以使用如下命令运行我的web应用程序: java -jar mywebapp.war 有没有maven插件可以获得这样的工件 目前,我正在使用它来运行我的应用程序的测试版本,这对于测试来说是非常令人满意的,但对于重新分发来说,它并不像一场可执行的战争那样方便(比如在詹金斯) 更新
java -jar mywebapp.war
有没有maven插件可以获得这样的工件
目前,我正在使用它来运行我的应用程序的测试版本,这对于测试来说是非常令人满意的,但对于重新分发来说,它并不像一场可执行的战争那样方便(比如在詹金斯)
更新
@jesse mcconnell:我不想在我的web应用程序中更改一行代码(pom.xml除外)来实现这个结果。这只是一个问题,以不同的方式打包我的war,并将其部署在所选的appserver下,再加上能够将其作为可执行war运行
一个完美的解决方案还应该让我能够选择嵌入哪个appserver,还可以指定可执行war本身中包含的所有必需的配置文件
@khmarbaise:我知道jenkins,很久以前我已经检查过代码,它使用winstone servlet容器,并且它在战争中放置了一个可以从http访问的Main.class(我认为这是错误的)
一个完美的解决方案可能会引发一场包含以下内容的战争:
├── 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
最后,您有了一个普通的war,它可以部署在任何appserver中,并能够以自包含的方式运行。我知道没有,但请检查直接从命令开始,就像您期望的那样。使用maven jar插件在清单中设置Main类,然后编写一个与此类似的Main方法(或这样调用代码): 您可以注册servlet并相应地连接webapp 将war文件捆绑到jar文件中的问题是,您需要一个专门的部署人员,能够理解如何在jar中部署war文件,这不是一件常见的事情。因此,创建一个uber类型的jar可能是更好的方法。此外,实际WebAppContext的一个重要原因是类加载器隔离,它在这种情况下是没有意义的 你可以使用maven依赖插件来解压你所需要的各种依赖项。你也可以使用其他插件,比如maven uberjar插件(我想这就是它的名字),但是你可以简单地使用maven依赖插件+一个类似于上面的自定义主类 我喜欢这种方法,因为您最终得到了一个可以在eclipse中运行的主方法,它可以启动整个应用程序并让您调试整个程序,这通常是一个很大的成功
编辑:对于后人来说,jetty还发布了一个名为jetty runner的工件,它允许直接从命令行运行war文件
Hth
如果它不存在,我会在这种情况下,你需要一个定制的IMPL来处理这个方法所带来的所有类加载器问题……也许是扩展到CalthWorkS之类的东西,FIWW没有想到在这样的一个盒子外的实现中,这将是我认为这个问题的最终解决方案。t、 另外,一个不完美(但有效)的解决方案也是受欢迎的。顺便说一句,我现在正在查看一些代码,我希望类加载问题不会那么难解决。检查过了;还可以。它生成一个包含war的jar,然后在运行时提取它。我想,我最终会按照我的方式执行mojo。