有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAlang.NoClassDefFoundError与ANT生成的JAR

我正在运行生成JAR文件的Ant脚本,但当我执行JAR文件时,会出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
        at mx.isban.csd.ws.Main.<clinit>(Main.java:31)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

这是我的ant脚本:

<?xml version="1.0" encoding="UTF-8"?>
<project name="WSCargaLlavesClient" default="build" basedir="..">
  <description>Build File</description>

  <property name="app.jar.cli"   value="${ant.project.name}.jar" />
  <property name="dir.src.cli"   value="${basedir}/${app.jar.cli}"/>
  <property name="dir.build"     value="${basedir}/build"/>
  <property name="dir.lib"       value="${basedir}/lib"/>
  <property name="classes.dir"   value="${dir.build}/classes"/>


  <path id="classpath">
    <fileset dir="${dir.lib}" includes="**/*.jar"/>
  </path>

  <target name="clean">
    <delete dir="${dir.build}"/>
  </target>

  <target name="compila-client">
    <mkdir dir="${dir.lib}"/>
    <mkdir dir="${dir.build}"/>
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${dir.src.cli}" debug="on" destdir="${classes.dir}" 
           classpathref="classpath" includeantruntime="false"
           source="1.6" target="1.6"/>
  </target>

  <target name="build" depends="compila-client">
    <jar destfile="${dir.build}/${app.jar.cli}" basedir="${classes.dir}">
      <manifest>
        <attribute name="Class-Path" value="lib/commons-beanutils.jar lib/commons-codec-1.8.jar lib/commons-io-1.4.jar lib/commons-lang.jar lib/commons-logging.jar lib/ezmorph-1.0.2.jar lib/json-lib-1.1.jar lib/log4j-1.2.17.jar" />
        <attribute name="Main-Class" value="mx.isban.csd.ws.Main"/>
      </manifest>
      <fileset dir="." includes="lib\*"/>
    </jar>
  </target>

  <target name="clean-build" depends="clean,build"/>

</project>

我已经打开了舱单,找到了log4j-1.2.17。jar文件

enter image description here

我还检查了我的舱单。MF文件,它就在这里: enter image description here

当我用eclipse生成一个可运行的JAR文件时,它工作得很好,这是eclipse生成的ANT脚本:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project WSCargaLlavesClient with Jar-in-Jar Loader">
    <!--this file was created by Eclipse Runnable JAR file Export Wizard-->
    <!--ANT 1.7 is required-->
    <!--define folder properties-->
    <property name="dir.buildfile" value="."/>
    <property name="dir.workspace" value="C:/Users/Jesus Ayala/developer/workspace/WSCargaLlavesClient"/>
    <property name="dir.jarfile" value="${dir.buildfile}"/>
    <target name="create_run_jar">
        <jar destfile="${dir.jarfile}/WSCargaLlavesClient.jar">
            <manifest>
                <attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader"/>
                <attribute name="Rsrc-Main-Class" value="mx.isban.csd.ws.Main"/>
                <attribute name="Class-Path" value="."/>
                <attribute name="Rsrc-Class-Path" value="./ commons-beanutils.jar commons-codec-1.8.jar commons-io-1.4.jar commons-lang.jar commons-logging.jar ezmorph-1.0.2.jar json-lib-1.1.jar log4j-1.2.17.jar"/>
            </manifest>
            <zipfileset src="jar-in-jar-loader.zip"/>
            <fileset dir="${dir.workspace}/WSCargaLlavesClient/bin"/>
            <zipfileset dir="C:/REPO/SellosDigitales-Des/src/java/WSCargaLlavesClient/lib" includes="commons-beanutils.jar"/>
            <zipfileset dir="C:/REPO/SellosDigitales-Des/src/java/WSCargaLlavesClient/lib" includes="commons-codec-1.8.jar"/>
            <zipfileset dir="C:/REPO/SellosDigitales-Des/src/java/WSCargaLlavesClient/lib" includes="commons-io-1.4.jar"/>
            <zipfileset dir="C:/REPO/SellosDigitales-Des/src/java/WSCargaLlavesClient/lib" includes="commons-lang.jar"/>
            <zipfileset dir="C:/REPO/SellosDigitales-Des/src/java/WSCargaLlavesClient/lib" includes="commons-logging.jar"/>
            <zipfileset dir="C:/REPO/SellosDigitales-Des/src/java/WSCargaLlavesClient/lib" includes="ezmorph-1.0.2.jar"/>
            <zipfileset dir="C:/REPO/SellosDigitales-Des/src/java/WSCargaLlavesClient/lib" includes="json-lib-1.1.jar"/>
            <zipfileset dir="C:/REPO/SellosDigitales-Des/src/java/WSCargaLlavesClient/lib" includes="log4j-1.2.17.jar"/>
        </jar>
    </target>
</project>

如果能帮助我的ANT脚本构建正确的JAR文件,我将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    您需要在classpath即lib文件夹下有log4jjar。如果已经存在,则类路径设置不正确

    试试看

      <attribute name="Class-Path" value="lib" />