【问题标题】:runtime classpath using manifest.mf classpath使用 manifest.mf 类路径的运行时类路径
【发布时间】:2014-12-15 13:48:50
【问题描述】:

我用 ant 构建了一个耳朵,它的编译很好。但是,当我部署时,我在 weblogic 服务器日志中得到 noclassdeffound 错误。所以我在服务器启动脚本中添加了库(jars),即它工作正常的服务器 java 类路径。

请帮助我如何使用 ant build 解决这个运行时类路径问题。我假设在 manifest.mf 文件中添加类路径会有所帮助。到目前为止,我的 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>

【问题讨论】:

  • 您需要将缺少的 jar 添加到您的 WAR/EAR 文件中的“WEB-INF/lib”目录中。这将在运行时自动将它们添加到应用程序的类路径中。
  • war 中所有的 jar 都已经添加到 WEB-INF/lib 中。但我仍然看到运行时类路径问题。提前致谢

标签: java ant build manifest.mf


【解决方案1】:

通常您无需向 MANIFEST.MF 添加任何内容即可将您的 jars 添加到应用程序类路径中。

  1. 您的 Web 应用程序 (WAR) 文件应直接位于 EAR 下。
  2. 总体依赖项 (JAR) 应位于 EAR 的 APP-INF/lib 目录下。
  3. WAR 文件 WEB-INF/lib 目录下的 Web 应用程序自己的依赖项。查看您的 build.xml,它们应该在那里。

在更改您的 Ant 构建脚本之前,请检查这些先决条件,并请提供来自 Weblogic 错误日志的堆栈跟踪。

【讨论】:

    猜你喜欢
    • 2018-03-16
    • 2015-06-26
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多