mvn:jetty无法加载WebAppContext

时间:2016-03-18 13:11:38

标签: maven jndi jetty-9

当我试图从日食中运行码头时,我有一种奇怪的情况。我将旧项目从码头7改为码头9.3.7.v20160115。但是,现在当启动jetty时:用m2eclipse运行我得到以下异常:

java.lang.IllegalArgumentException: Object of class 'org.eclipse.jetty.maven.plugin.JettyWebAppContext' is not of type 'org.eclipse.jetty.webapp.WebAppContext'. Object Class and type Class are from different loaders. in file:/xx/WebApp/src/main/webapp/WEB-INF/jetty-env.xml
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:295)
at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:245)
at org.eclipse.jetty.plus.webapp.EnvConfiguration.configure(EnvConfiguration.java:116)

从消息中我可以看出这两个类不一样。但是从文档中我需要使用类org.eclipse.jetty.webapp.WebAppContext和org.eclipse.jetty.maven.plugin.JettyWebAppContext是WebAppContext的子类。所以我不清楚第292行的条件是否适用

oClass.isInstance(obj)

在那里正确使用。

我在jetty-env.xml文件中定义了以下条目:

<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
 <New id="resInspector" class="org.eclipse.jetty.plus.jndi.Resource">
  <Arg><Ref refid="wac"/></Arg>
  <Arg>jdbc/xxx</Arg>
  <Arg>
   <New class="org.apache.commons.dbcp.BasicDataSource">
     <Set name="driverClassName">org.postgresql.Driver</Set>
     <Set name="url">jdbc:postgresql://xx:5432/xx</Set>
     <Set name="username">xx</Set>
     <Set name="password">xx</Set>
     <Set name="maxActive">100</Set>
     <Set name="maxIdle">30</Set>
     <Set name="maxWait">-1</Set>
     <Set name="defaultAutoCommit">false</Set>
   </New>
  </Arg>
 </New>
</Configure>

接下来,我在web.xml中添加了这些条目

<resource-ref>
  <description> JNDI resource</description>
  <res-ref-name>jdbc/xxx</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

感谢您的帮助。

马库斯

2 个答案:

答案 0 :(得分:1)

实际上它与一些重复的jar文件有关。在我的maven pom文件中,我有不必要的文件(jetty-plus,jetty-annotations,jetty-jndi,jetty-xml)。 从我的maven文件中删除那些jar文件解决了这个问题。

感谢您的建议

答案 1 :(得分:0)

错误消息显示:

Object Class and type Class are from different loaders

因此,对象类obj.getClass()和类型Class oClass可能相同或相同,但是从不同的类加载器加载。

可能的原因可能是你的类路径中有这个类两次。一旦通过jetty插件的依赖关系,一次在你的pom中。 使用mvn dependecy:tree来检查并排除你的pom的依赖关系。

您也可以尝试更改

中的课程
<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">

<Configure id='wac' class="org.eclipse.jetty.maven.plugin.JettyWebAppContext">