2014-10-20 91 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错误日志的堆栈跟踪。