Java 获取错误:";web.xml绝对顺序标记“处的片段名称错误”;

Java 获取错误:";web.xml绝对顺序标记“处的片段名称错误”;,java,maven,web.xml,tomcat9,Java,Maven,Web.xml,Tomcat9,我正在将一个应用程序转换为Maven,并更新为Tomcat9、OpenJDK-11、JSF2.3和PrimeFaces7.0。前两部分进行得很成功,但我在更新JSF时遇到了麻烦。一个障碍是通过在OpenJDK11中导入CDI支持来调整JSF放弃托管bean。我想我已经包含了所有正确的库,并做了适当的注释更改。现在的问题是,我得到了以下错误: WARNING: Used a wrong fragment name [acme_common] at web.xml absolute-ordering

我正在将一个应用程序转换为Maven,并更新为Tomcat9、OpenJDK-11、JSF2.3和PrimeFaces7.0。前两部分进行得很成功,但我在更新JSF时遇到了麻烦。一个障碍是通过在OpenJDK11中导入CDI支持来调整JSF放弃托管bean。我想我已经包含了所有正确的库,并做了适当的注释更改。现在的问题是,我得到了以下错误:

WARNING: Used a wrong fragment name [acme_common] at web.xml absolute-ordering tag!
之后,ApplicationContextListener会出现ClassNotFound异常

设置是我有一个主应用程序项目,我们称之为
acmemain
,还有一个公共项目
acmecommon
,包含所有第三方库、框架等。主项目
acmemain
有一个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>
“错误的片段名称”和ClassNotFound错误听起来都像是构建路径/类路径问题,但是AcmeMain在构建路径中肯定有acme公共项,并作为项目参考(我在Eclipse中开发)。奇怪的是,ClassNotFound类(MainAppContextListener)是在acme主项目中定义的


用谷歌搜索“错误片段”错误并没有透露任何信息。正如我所说的,这个项目配置一直在工作,我也没有发现任何可疑之处,将当前配置与过去进行比较。我没有主意了,如果有任何建议,我将不胜感激。

我终于解决了这个问题。我推断,要找到web片段,acme-common.jar应该出现在Eclipse的服务器文件位置的META-INF/lib下。当我发现它丢失时,我专注于Eclipse的构建程序集。我认为出现问题的原因是,在Java构建路径、订单和导出选项卡上,我有未导出的部分,和/或acme-common.jar未包含在Web部署程序集中。我怀疑我在项目的maven版本和非maven版本之间的切换导致了一些项目设置的中断


因此,虽然这最终是一个非常狭隘的问题,但我将把这个问题保留下来,以防它对任何人都有用。

运行时类路径!=构建时类路径。两个都检查
<?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)