2014-10-20 87 views
0

我使用ant構建了一個耳朵,並且它的編譯良好。但是,當我部署我在weblogic服務器日誌中得到noclassdeffound錯誤。所以我在服務器啓動腳本中添加了庫(jar),即服務器java類路徑工作正常。使用manifest.mf類路徑的運行時類路徑

請幫助我如何使用ant build解決此運行時類路徑問題。我假設在manifest.mf文件中添加classpath會有所幫助。到目前爲止,我的build.xml是:

請指點

<?xml version="1.0"?> 
<project name="xxx APP Check" default="all" basedir="."> 


<target name="init"> 
<property name="software.version" value="1.0"/> 
<property name="user.name" value="usrnme"/> 
<property name="dirs.base" value="${basedir}"/> 
<property name="classdir" value="${dirs.base}/build/src"/> 
<property name="src" value="${dirs.base}/src"/> 
<property name="mf" value="${dirs.base}/src/META-INF"/> 
<property name="jar" value="${dirs.base}/build/jar"/> 
<property name="web" value="${dirs.base}/web"/> 
<property name="deploymentdescription" value="${dirs.base}/build/deploymentdescriptors"/> 

<property name="warFile" value="xxxappchk.war"/> 
<property name="earFile" value="xxxxappchk.ear"/> 


<property name="earDir" value="${dirs.base}/build/ear"/> 
<property name="warDir" value="${dirs.base}/build/war"/> 
<property name="srcDir" value="${dirs.base}/build/src"/> 


<!-- Create Web-inf and classes directories --> 
<mkdir dir="${warDir}/WEB-INF"/> 
<mkdir dir="${warDir}/WEB-INF/classes"/> 
<mkdir dir="${warDir}/WEB-INF"/> 
<mkdir dir="${warDir}/WEB-INF/lib"/> 
<mkdir dir="${warDir}/WEB-INF/classes"/> 

<!-- Create Meta-inf and classes directories --> 
<mkdir dir="${warDir}/META-INF"/> 
<mkdir dir="${earDir}/META-INF"/> 


</target> 

<!-- Main target --> 
<target name="all" depends="init,build,buildWar,buildEar,clean"/> 


<!-- Compile Java Files and store in /build/src directory --> 
<target name="build" > 
<path id="3rdparty.jar.path"> 
     <fileset dir="${jar}"> 
     <include name="*.jar" /> 
    </fileset> 

</path> 
<javac srcdir="${src}" includeantruntime="false" destdir="${classdir}" debug="true" includes="**/*.java" > 
<classpath> 
     <path refid="3rdparty.jar.path"/> 
</classpath> 
</javac> 
</target> 

<!-- Create the War File --> 
<target name="buildWar" depends="init"> 
<copy todir="${warDir}/WEB-INF/classes"> 
<fileset dir="${classdir}" includes="**/*.class" /> 
</copy> 

<jar destfile="${warDir}/WEB-INF/lib/xxxx-appcheck.jar" 
     basedir="${warDir}/WEB-INF/classes" 
/> 
<echo message="Hyperion appcheck jar created."/> 

<copy todir="${warDir}/WEB-INF/classes/com/ca/xxxx_appcheck"> 
<fileset dir="${src}" includes="**/*.java" /> 
</copy> 


<copy todir="${warDir}/WEB-INF"> 
<fileset dir="${deploymentdescription}" includes="web.xml" /> 
</copy> 

<copy todir="${warDir}/WEB-INF/lib"> 
<fileset dir="${jar}" includes="*.jar" /> 
</copy> 


<copy todir="${warDir}"> 
<fileset dir="${web}" includes="**/*.*" /> 
</copy> 

<!-- Create war file and place in ear directory --> 
<jar jarfile="${earDir}/${warFile}" basedir="${warDir}" /> 


</target> 


<!-- Create the War File --> 
<target name="buildEar" depends="init"> 
<copy todir="${earDir}/META-INF"> 
<fileset dir="${deploymentdescription}" includes="application.xml" /> 
</copy> 

<!-- Create ear file and place in ear directory --> 
<jar jarfile="${dirs.base}/${earFile}" basedir="${earDir}" /> 
</target> 

    <target name="clean" description="Delete all generated files"> 

     <delete dir="${srcDir}" failonerror="false"/> 
     <delete dir="${earDir}" failonerror="false"/> 
     <delete dir="${warDir}" failonerror="false"/> 
     <echo message="Deleted the temp directories src, war, ear"/> 
     <mkdir dir="${earDir}"/> 
     <mkdir dir="${warDir}"/> 
     <mkdir dir="${srcDir}"/> 
     <echo message="created the temp directories src, war, ear"/> 

    </target> 

</project> 
+0

您需要將缺少的jar添加到WAR/EAR文件中的「WEB-INF/lib」目錄中。這會在運行時自動將它們添加到應用程序的類路徑中。 – 2014-10-20 20:56:31

+0

所有的jar已經被添加到war中的WEB-INF/lib中。但我仍然看到運行時類路徑問題。 在此先感謝 – 2014-10-22 12:12:53

回答

0

通常你不需要任何補充MANIFEST.MF,讓您的罐子添加到應用程序的類路徑。

  1. 您的Web應用程序(WAR)文件應該直接在EAR下。
  2. 整體依賴關係(JAR)應位於EAR的APP-INF/lib目錄下。
  3. Web應用程序在WAR文件WEB-INF/lib目錄下擁有自己的依賴關係。看着你的build.xml,他們應該在那裏。

在更改您的Ant構建腳本之前,請檢查這些先決條件並請提供來自Weblogic錯誤日誌的堆棧跟蹤。