2016-08-09 29 views
1

我通過ant運行時遇到了NoClassDefFoundError,但在Tomcat中部署應用時它正在運行。NoClassDefFoundError當通過Ant運行測試但在Tomcat中部署時工作

我調用它使用

ant test 

異常

java.lang.NoClassDefFoundError: org/apache/commons/dbcp2/BasicDataSource 
at com.x.ws.repo.DatabaseConnection.<init>(Unknown Source) 
at com.x.ws.repo.DatabaseConnection.getSynchronizedInstance(Unknown Source) 
at com.x.ws.repo.DatabaseConnection.getInstance(Unknown Source) 
at com.x.ws.repo.Foo.<init>(Unknown Source) 
at com.x.ws.repo.FooTest.setUp(Unknown Source) 

Ant腳本

<path id="classpath.test"> 
    <pathelement location="WebContent/WEB-INF/lib/junit-4.11.jar"/> 
    <pathelement location="WebContent/WEB-INF/lib/hamcrest-all-1.3.jar"/> 
    <pathelement location="WebContent/WEB-INF/lib/java-json.jar"/> 
    <pathelement location="${main.build.dir}"/> 
</path> 

<target name="test-compile" depends="compile"> 
    <javac srcdir="${test.src.dir}" destdir="${test.build.dir}"> 
     <classpath refid="classpath.test"/> 
     <classpath refid="classpath"/> 
    </javac> 
</target> 

<target name="test" depends="test-compile"> 
    <junit printsummary="yes" haltonfailure="no"> 
     <classpath refid="classpath.test" /> 
     <classpath location="${test.build.dir}" /> 

     <formatter type="xml" /> 
     <formatter type="plain" /> 
     <batchtest fork="yes" todir="${reports.src.dir}"> 
      <fileset dir="${test.src.dir}"> 
       <include name="**/*Test*.java" /> 
      </fileset> 
     </batchtest> 
    </junit> 
</target> 

回答

2

我猜DBCP目前是打包在你的$ {CATALINA_HOME}/lib中,即Tomcat的lib目錄。由FooTest運行的代碼中定義的數據源必須定義爲BasicDataSource,因此您應該在classpath.test中爲commons-dbcp.jar添加另一個條目。

相關問題