我正在寻找 运行 Java Tomcat 中的 EE Web 配置文件所需的 Maven 依赖项的规范列表

I am looking for a canocical list of maven dependensies needed to run Java EE Web Profile in Tomcat

我正在尝试做一些微不足道的事情。我想 运行 Apache Tomcat 中的 Java EE Web Profile 8 应用程序 Tomcat 9. 最近几天我一直在网上搜索,现在试图找到 Java Tomcat 需要 EE 依赖项。任何人都可以帮我列出这样一份清单吗?我已阅读以下文章,但它们没有帮助:

How to properly install and configure JSF libraries via Maven?

看到 Java EE 非常庞大,而且这些信息不仅在网络上可用,所以回答这个问题很重要。如果可以列出官方来源,这将有所帮助。

我的POM文件目前只包含

<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-web-api</artifactId>
    <version>8.0.0</version>
</dependency>

运行我的 webapp

时出现以下异常
java.util.MissingResourceException: Can't find javax.faces.LogStrings bundle from 
    at java.logging/java.util.logging.Logger.setupResourceInfo(Logger.java:2300)
    at java.logging/java.util.logging.Logger.<init>(Logger.java:565)
    at java.logging/java.util.logging.LogManager.demandLogger(LogManager.java:524)
    at java.logging/java.util.logging.LogManager.demandLogger(LogManager.java:517)
    at java.logging/java.util.logging.Logger.demandLogger(Logger.java:655)
    at java.logging/java.util.logging.Logger.getLogger(Logger.java:793)
    at java.logging/java.util.logging.Logger.getLogger(Logger.java:769)
    at javax.faces.webapp.FacesServlet.<clinit>(FacesServlet.java:258)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:151)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1042)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:983)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4902)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5206)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:843)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)

您添加的依赖项只是API。 Java EE 由一系列规范(APIs)组成,(网络配置文件是其中的一个子集)。但它们只有 API,您还需要实现。

因此,除了 jakarta.jakartaee-web-api 之外,它会带来您需要的所有 API,允许您编译任何代码,您还需要所有这些 API 的所有实现,以便让它在 运行 时间工作(这就是为什么你的代码编译但它不 运行。它在类路径中有 APIs 要编译,但没有 [= 的实现35=]).这是一个很长的列表,您需要为每个列表手动添加一些内容。 ypu 可以想象,这不是一个好主意。 Tjats 为什么有应用程序服务器(Wildfly、Payara、TomEE...但不是 Tomcat ,它 只是 一个 Servlet 容器,它实现了 Servlet 规范,除了一堆其他事情。)。

应用程序服务器将所有 Java EE 规范的实现捆绑在一起,并进行了适当的集成和测试。它们有多种形式,最常见的是完整配置文件(完整 Java EE)或网络配置文件(您正在寻找的内容)。

因此,您应该下载 Web 配置文件版本的应用程序服务器。如果您来自 Tomcat,正如 PiotR 评论的那样,您应该选择 TomEE,它是 Tomcat 捆绑了 Java EE 规范实现。

http://tomee.apache.org/download.html

你可以在这里找到 TomEE 的所有版本,你要找的是 https://www.apache.org/dyn/closer.cgi/tomee/tomee-8.0.8/apache-tomee-8.0.8-webprofile.zip