2013-07-31 69 views
1

我目前工作的項目是一個標準的Web應用程序,並且想要使用嵌入式tomcat(mvn tomcat7:run)啓動它。在META-INF/context.xml中有一個條目擴展類路徑和Tomcat插件

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

擴展Web應用程序的類路徑。

使用mvn tomcat7啓動Web應用程序時:運行大量ClassNotFoundExceptions,例如,

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

被拋出。

有沒有辦法讓tomcat插件與tomcat插件一起工作,同時在context.xml中擴展classpath?

+0

問題;你有沒有在你指向的虛擬目錄中報告爲「ClassNotFound」的類?是否定義了$ {home}?另外,如果你僅指定virtualClasspath中的目錄,則這些類預計將在分解目錄層次結構中找到;如果在$ {home}/lib中有多個jar文件,則應該將每個jar作爲單獨的virtualClasspath元素列出。 –

+0

當運行mvn tomcat7時,webapp可以正常工作:run-war(當我生成war文件並將其複製到現有的tomcat中)。只有在使用嵌入式tomcat時纔會發生異常。沒有找到的類是Catalina類。 {$ home}被定義,我已經展開了目錄層次結構。 – tfeiner

回答

4

此問題的答案是將Tomcat插件設置爲使用maven中的單獨類加載器。通過將插件的useSeparateTomcatClassLoader參數設置爲true來完成此操作。這可以在Tomcat插件配置來完成:

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

或用來啓動Tomcat插件在命令行上:

mvn tomcat7:run -Dtomcat.useSeparateTomcatClassLoader=true 

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