将JavaEEWeb应用程序导出为JAR

将JavaEEWeb应用程序导出为JAR,java,maven,jakarta-ee,packaging,Java,Maven,Jakarta Ee,Packaging,这可能是一个奇怪的问题,但我很好奇: 我想创建一个JavaEEWeb项目,我可以将其打包成一个JAR文件(JAR,而不是war) 换句话说,我希望将JavaEEWeb服务器包含在JAR中(由maven构建) 在Web服务器内部,我希望使用servlet,就像我在将其打包到WAR文件时可以使用servlet一样,但不要求执行JAR的设备安装Web服务器,以便部署我的JAR 我想要一个类似于可执行JAR的东西,它包含服务器并运行它,而不需要安装其他东西 是否有一个(理想的轻量级)服务器可以在JAR文

这可能是一个奇怪的问题,但我很好奇:

我想创建一个JavaEEWeb项目,我可以将其打包成一个JAR文件(
JAR
,而不是
war

换句话说,我希望将JavaEEWeb服务器包含在JAR中(由maven构建)

在Web服务器内部,我希望使用servlet,就像我在将其打包到WAR文件时可以使用servlet一样,但不要求执行JAR的设备安装Web服务器,以便部署我的JAR

我想要一个类似于可执行JAR的东西,它包含服务器并运行它,而不需要安装其他东西


是否有一个(理想的轻量级)服务器可以在JAR文件中工作,或者有任何其他可能创建这样的JAR文件?

如果您想使用vanilla Java EE,可以使用嵌入式Jetty服务器或嵌入式Tomcat服务器:

下面是一个嵌入Tomcat和Maven的示例:

pom.xml:


4.0.0
组织公司
应用程序
0.0.1-快照
罐子
UTF-8
12
12
3.1.0
2.2.19
9.0.21
com.sun.faces
JSFAPI
${jsf.version}
com.sun.faces
jsf impl
${jsf.version}
org.apache.tomcat.embed
tomcat嵌入式内核
${tomcat.version}
org.apache.tomcat
雄猫贾斯珀
${tomcat.version}
org.apache.tomcat.embed
tomcat嵌入式el
${tomcat.version}
应用程序
src/main/webapp
META-INF/资源
org.apache.maven.plugins
maven编译器插件
3.8.1
12
12
org.apache.maven.plugins
maven汇编插件
带有依赖项的jar
app-${project.version}
org.company.app.Application
包裹
单一的
主要类别:

package org.company.app;
导入org.apache.catalina.WebResourceRoot;
导入org.apache.catalina.core.StandardContext;
导入org.apache.catalina.startup.Tomcat;
导入org.apache.catalina.webresources.DirResourceSet;
导入org.apache.catalina.webresources.StandardRoot;
导入java.io.File;
公共类应用程序{
公共静态void main(最终字符串[]args)引发异常{
最后一个字符串webappPath=新文件(“src/main/webapp”).getAbsolutePath();
最终Tomcat Tomcat=新Tomcat();
最终标准上下文ctx=(标准上下文)tomcat.addWebapp(“/”,webappPath);
系统输出打印项次(ctx
);
//为“WEB-INF/classes”目录声明一个替代位置
//Servlet3.0注释将起作用
最后一个字符串targetClassesPath=新文件(“目标/类”).getAbsolutePath();
最终WebResourceRoot资源=新的StandardRoot(ctx);
resources.addPreResources(新目录资源集(//
资源“/WEB-INF/classes”//
targetClassesPath,“/”);
ctx.setResources(资源);
tomcat.start();
tomcat.getServer().await();
}
}

剩下的就照常进行JavaEE开发了

Spring boot。或嵌入码头。或者使用SpringBoot和jetty.Hammock项目,结合Capsule打包到一个可执行的jar中,对于JavaEE应用程序来说是非常好和轻量级的。您可以构建一个exe,该exe甚至可以在没有安装Java的情况下运行。也就是说,产品建议不应该在堆栈溢出问题的范围内,我们可能应该结束您的问题。您的
在哪里?此外,我必须将
tomcat-embed-jasper
tomcat-embed-el
添加到我的依赖项和
tomcat.getConnector()jsf-api
jsf-api
。感谢您的提示,我在复制pom时可能没有注意。我编辑了答案。