2013-07-31 4 views
1

Le projet sur lequel je travaille actuellement est une application web standard que je souhaite démarrer avec tomcat embarqué (mvn tomcat7: run). Dans META-INF/context.xml, il y a une entréeExtension de classpath et de plugin Tomcat

<Loader className="org.apache.catalina.loader.VirtualWebappLoader" 
     virtualClasspath="${home}/lib"/> 

pour étendre le chemin de classe de l'application Web.

Lors du démarrage de l'application Web avec mvn tomcat7: exécutez un grand nombre d'exceptions ClassNotFound, par ex.

java.lang.ClassNotFoundException: org.apache.catalina.deploy.ServletDef 

sont levées.

Existe-t-il un moyen de faire fonctionner tomcat avec le plugin tomcat tout en prolongeant le classpath dans context.xml?

+0

Questions; avez-vous les classes signalées comme "ClassNotFound" dans le répertoire virtuel que vous pointez? Est-ce que $ {home} est défini? En outre, si vous indiquez juste le répertoire dans virtualClasspath, les classes devraient être trouvées dans la hiérarchie explosée des répertoires; Si vous avez plusieurs fichiers jar dans le répertoire $ {home}/lib, vous devez lister chaque fichier jar en tant qu'élément virtualClasspath distinct. –

+0

La webapp fonctionne très bien lors de l'exécution de mvn tomcat7: run-war (et quand je génère un fichier war et le copie sur un tomcat existant). L'exception se produit uniquement lors de l'utilisation de Tomcat intégré. Les classes qui ne sont pas trouvées sont des classes Catalina. {$ home} est défini et j'ai exploré la hiérarchie des répertoires. – tfeiner

Répondre

4

La réponse à ce problème consiste à définir le plug-in Tomcat pour utiliser un chargeur de classe distinct de maven. Cela est effectué en définissant le paramètre useSeparateTomcatClassLoader sur le plug-in à true. Cela peut être fait dans la configuration plug-in Tomcat:

<plugin> 
    <groupId>org.apache.tomcat.maven</groupId> 
    <artifactId>tomcat7-maven-plugin</artifactId> 
    <configuration> 
    <contextReloadable>true</contextReloadable> 
    <useSeparateTomcatClassLoader>true</useSeparateTomcatClassLoader> 
    </configuration> 
</plugin> 

ou sur la ligne de commande utilisée pour lancer le plugin Tomcat:

mvn tomcat7:run -Dtomcat.useSeparateTomcatClassLoader=true 

Voir: http://tomcat.apache.org/maven-plugin-2.1/tomcat7-maven-plugin/run-mojo.html