我正在嘗試做一些微不足道的事情。我想在 Apache Tomcat 9 中運行 Java EE Web Profile 8 應用程式。過去幾天我一直在網上搜索,現在試圖找到 Tomcat 所需的 Java EE 依賴項的規范串列。任何人都可以幫我列出這樣的清單嗎?我已閱讀以下文章,但它們沒有幫助:
如何通過 Maven 正確安裝和配置 JSF 庫?
Tomcat 將 servlet 轉換為 javax.servlet.Servlet 而不是 jakarta.servlet.http.HttpServlet
看到 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)
uj5u.com熱心網友回復:
您添加的依賴項只是 API。Java EE 由一系列規范 (API) 組成(Web 組態檔是這些規范的一個子集)。但它們只是 API,您還需要實作。
因此,除了jakarta.jakartaee-web-api, 它將帶來您需要的所有 api,允許您編譯任何代碼,您需要所有這些 API 的所有實作才能使其在運行時作業(這就是為什么您的代碼可以編譯但它不't run。它在類路徑中有要編譯的 API,但沒有要運行的實作)。這是一個很長的串列,您需要為每個串列手動添加一些內容。正如 ypu 可以想象的那樣,這不是一個好主意。Tjats 為什么有應用服務器(Wildfly、Payara、TomEE ......但沒有 Tomcat,它只是一個 Servlet 容器,它實作了 Servlet 規范,以及其他一些東西。)。
應用服務器將所有 Java EE 規范的實作捆綁在一起,并進行了適當的集成和測驗。它們有多種風格,最常見的是完整組態檔(整個 Java EE)或 Web 組態檔(您正在尋找的內容)。
因此,您應該在其 Web 組態檔版本中下載應用程式服務器。如果您來自 Tomcat,正如 PiotR 評論的那樣,您應該選擇 TomEE,它是捆綁了 Java EE 規范實作的 Tomcat。
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 。壓縮
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359091.html
