2016-03-18 1 views
1

J'ai une situation étrange, en essayant d'exécuter jetée d'éclipse. J'ai mis à jour mon ancien projet de jetée 7 à la jetée 9.3.7.v20160115. Mais, maintenant, quand à partir de la jetée: courir avec m2eclipse Je suis l'exception suivante:mvn: jetty incapable de charger WebAppContext

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) 

Du message que je peux voir que les deux classes ne sont pas les mêmes. Mais à partir de la documentation, j'ai besoin d'utiliser la classe org.eclipse.jetty.webapp.WebAppContext et org.eclipse.jetty.maven.plugin.JettyWebAppContext est une sous-classe de WebAppContext. Donc, il n'est pas clair pour moi si la condition de la ligne 292

oClass.isInstance(obj) 

est correctement utilisée ici.

J'ai défini dans le fichier-jetée env.xml les entrées suivantes:

<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> 

Ensuite, j'ajouté dans web.xml les entrées

<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> 

Merci pour toute aide.

Markus

Répondre

0

Le message d'erreur indique:

Object Class and type Class are from different loaders 

Ainsi, la classe d'objets obj.getClass() et le type de classe oClass peuvent être égaux ou identiques, mais chargés de différents classloaders.

La raison possible pourrait être que vous avez deux fois cette classe dans votre classpath. Une fois à travers les dépendances du plugin jetty et une fois dans votre pom. Utilisez mvn dependecy: tree pour vérifier cela et exclure la dépendance de votre pom.

Vous pouvez également essayer de changer la classe

<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext"> 

à

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

Typo: mvn dépendance: arbre – mrh

1

En effet, il était lié à certains fichiers jar dupliqués. Dans mon fichier pom maven j'avais des fichiers inutiles (jetty-plus, jetty-annotations, jetty-jndi, jetty-xml). La suppression de ce fichier jar de mon fichier maven a résolu le problème.

merci pour votre suggestion