【问题标题】:Unable to run maven embedded tomcat for the second time第二次无法运行maven嵌入式tomcat
【发布时间】:2015-12-15 11:47:14
【问题描述】:

我正在尝试使用 maven tomcat 插件在同一构建中运行两组集成测试(两个不同的模块)。第一组在第一个模块上完美运行。但是tomcat无法为第二个模块部署战争。而是给出以下异常

  com.sun.faces.config.ConfigureListener contextInitialized
   SEVERE: Critical error during deployment:
   com.sun.faces.config.ConfigurationException: java.util.concurrent.ExecutionException: com.sun.faces.config.ConfigurationException: Unable to parse document 'jndi:/localhost/test-module2/WEB-INF/faces-config.xml': Illegal class loader binding
   at com.sun.faces.config.ConfigManager.getConfigDocuments(ConfigManager.java:760)
   at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:349)
   at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:214)
   at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5014)
   at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5524)
   at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
   at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
   at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
   at java.util.concurrent.FutureTask.run(FutureTask.java:262)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
   at java.lang.Thread.run(Thread.java:745)
   Caused by: java.util.concurrent.ExecutionException: com.sun.faces.config.ConfigurationException: Unable to parse document 'jndi:/localhost/test-module2/WEB-INF/faces-config.xml': Illegal class loader binding
   at java.util.concurrent.FutureTask.report(FutureTask.java:122)
   at java.util.concurrent.FutureTask.get(FutureTask.java:188)
   at com.sun.faces.config.ConfigManager.getConfigDocuments(ConfigManager.java:758)
   ... 11 more
   Caused by: com.sun.faces.config.ConfigurationException: Unable to parse document 'jndi:/localhost/test-module2/WEB-INF/faces-config.xml': Illegal class loader binding
   at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:1009)
   at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:953)
   at java.util.concurrent.FutureTask.run(FutureTask.java:262)
   at com.sun.faces.config.ConfigManager.getConfigDocuments(ConfigManager.java:746)
   ... 11 more
   Caused by: java.lang.IllegalStateException: Illegal class loader binding
   at org.apache.naming.resources.DirContextURLStreamHandler.get(DirContextURLStreamHandler.java:228)
   at org.apache.naming.resources.DirContextURLStreamHandler.openConnection(DirContextURLStreamHandler.java:90)
   at java.net.URL.openConnection(URL.java:971)
   at com.sun.faces.config.ConfigManager$ParseTask.getInputStream(ConfigManager.java:1230)
   at com.sun.faces.config.ConfigManager$ParseTask.getDocument(ConfigManager.java:1030)
   at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:1000)
   ... 14 more

两个maven项目的pom.xml中的插件配置如下:

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.3-SNAPSHOT</version>
    <configuration>
        <path>/test-module2</path>
        <port>8081</port>
    </configuration>
    <executions>
        <execution>
            <id>start-tomcat</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <fork>true</fork>
            </configuration>
        </execution>
        <execution>
            <id>stop-tomcat</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>shutdown</goal>
            </goals>
        </execution>
    </executions>
</plugin>

有人知道为什么会发生这个错误吗?

【问题讨论】:

标签: java maven tomcat maven-tomcat-plugin


【解决方案1】:

在这些模块中为您的 JNDI 资源使用不同的名称。我之前也遇到过这个问题的变体。似乎有某种静态导致了这种情况。 Maven 插件执行在同一个 JVM 中——Maven 的那个。如果它们是在分叉的 Java 中执行的,你很可能不会得到这个。

我不认为切换到 Jetty 会有所帮助,尽管它确实可能。但是,我的印象是,这在某种程度上是 Maven 本身的问题。

我认为这可能与在某处有一个静态 ServiceLocator 有关(就像很多这样的例子 one 显示)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-11
    • 2015-06-21
    • 2010-11-25
    • 2020-02-04
    • 2019-01-08
    • 2019-03-07
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多