我正在将应用程序转换为Maven,并更新为Tomcat 9,OpenJDK-11,JSF 2.3和PrimeFaces 7.0。前两个部分运行成功,但是我在更新JSF方面遇到了困难。一个障碍是通过在OpenJDK 11中导入CDI支持来适应JSF删除托管bean的问题。我想我已经包括了所有正确的库并进行了适当的注释更改。现在的问题是,我得到以下错误:
WARNING: Used a wrong fragment name [acme_common] at web.xml absolute-ordering tag!
以及此后,ApplicationContextListener的ClassNotFound异常。
设置是我有主应用程序项目,我们称它为acme-main
,而一个包含所有第三方库,框架等的通用项目acme-common
。主项目acme-main
有一个Web .xml就像这样:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<absolute-ordering>
<name>acme_common</name>
</absolute-ordering>
<listener>
<listener-class>com.acme.application.app.MainApplicationContextListener</listener-class>
</listener>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
</web-app>
然后,普通项目在web-fragment.xml中具有所有框架筛选器,servlet等:
<?xml version="1.0" encoding="UTF-8"?>
<web-fragment
metadata-complete="true" version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd">
<name>acme_common</name>
<!-- Various App Filters -->
<!-- Various App Servlets -->
<!-- Various App Listeners -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Various Context Parameters -->
</web-fragment>
这里是控制台输出,略有修剪:
Dec 02, 2019 10:03:50 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:acme-main' did not find a matching property.
...
Dec 02, 2019 10:03:50 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: ...
Dec 02, 2019 10:03:50 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Dec 02, 2019 10:03:51 AM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Dec 02, 2019 10:03:51 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-nio-8009"]
Dec 02, 2019 10:03:51 AM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Dec 02, 2019 10:03:51 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1119 ms
Dec 02, 2019 10:03:51 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Catalina]
Dec 02, 2019 10:03:51 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/9.0.8
...
Dec 02, 2019 10:03:52 AM org.apache.tomcat.util.descriptor.web.WebXml orderWebFragments
WARNING: Used a wrong fragment name [acme_common] at web.xml absolute-ordering tag!
Dec 02, 2019 10:03:52 AM org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Dec 02, 2019 10:03:52 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Error configuring application listener of class [com.acme.application.app.MainApplicationContextListener]
java.lang.ClassNotFoundException: com.acme.application.app.MainApplicationContextListener
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1292)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1121)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:540)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:521)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4549)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5091)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)
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:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:839)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)
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:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:258)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:770)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:682)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)
Dec 02, 2019 10:03:52 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Skipped installing application listeners due to previous error(s)
“错误的片段名称”和ClassNotFound错误都听起来像是buildpath / classpath问题,但是acme-main在构建路径和项目引用中肯定是acme-common(我正在Eclipse中开发)。奇怪的是,在acme-main项目中定义了ClassNotFound类(MainAppContextListener)。搜索“错误片段”错误没有发现任何问题。就像我说的那样,该项目配置一直在工作,并且在将当前配置与过去进行比较时,我也看不到任何可疑之处。我没有主意,不胜感激任何建议。
我正在将应用程序转换为Maven,并更新为Tomcat 9,OpenJDK-11,JSF 2.3和PrimeFaces 7.0。前两个部分运行成功,但是我在更新JSF方面遇到了困难。一个...
因此虽然这最终是一个非常狭窄的问题,但我会保留该问题,以防任何人使用它。