“线程中的异常”;“主要”;java.lang.NoClassDefFoundError:org/apache/log4j/Layout

“线程中的异常”;“主要”;java.lang.NoClassDefFoundError:org/apache/log4j/Layout,java,ant,log4j,Java,Ant,Log4j,我正在尝试使用ant构建一个应用程序。当我构建的时候,一切看起来都很好,但是我一直在尝试上面的错误 java-jardist/pmml\u export.jar java-cp.“:log4j-1.2.16.jar”-jar dist/pmml_export.jar java-cp log4j-1.2.16.jar-jar-dist/pmml_export.jar 我仔细检查了一下布局是否在我引用的jar中,它是否在那里。我对ant和log4j都是新手,所以我可能犯了一个明显的错误,但我只是

我正在尝试使用ant构建一个应用程序。当我构建的时候,一切看起来都很好,但是我一直在尝试上面的错误

  • java-jardist/pmml\u export.jar
  • java-cp.“:log4j-1.2.16.jar”-jar dist/pmml_export.jar
  • java-cp log4j-1.2.16.jar-jar-dist/pmml_export.jar
我仔细检查了一下布局是否在我引用的jar中,它是否在那里。我对ant和log4j都是新手,所以我可能犯了一个明显的错误,但我只是没有看到它。这是我的
build.xml

<?xml version="1.0"?>
<project name="pmml_export" default="archive">

  <target name="init">
    <mkdir dir="build/classes" />
    <mkdir dir="dist" />
  </target>

  <path id="compile.classpath">
    <fileset dir="build/classes" includes="*.class" />
  </path>

  <property name="ant.dir" value="apache-log4j-1.2.16"/>

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

  <target name="exceptions" depends="init">
    <javac srcdir="src/exceptions" destdir="build/classes" classpathref="compile.classpath"/>
    <echo> Exceptions compiled! </echo>
  </target>

  <target name="symbol-table" depends="exceptions" >
    <javac srcdir="src/translator/symbol_table" destdir="build/classes"   classpathref="compile.classpath"/>
    <echo> Symbol table compiled! </echo>
  </target>

  <target name="parser" depends="symbol-table" >
    <javac srcdir="src/translator/parser" destdir="build/classes" classpathref="compile.classpath"/>
    <echo> Parser compiled! </echo>
  </target>

  <target name="lexer" depends="parser" >
    <javac srcdir="src/translator/lexer" destdir="build/classes"  classpathref="compile.classpath"/>
    <echo> Lexer compiled! </echo>
  </target>

  <target name="translator" depends="lexer" >
    <javac srcdir="src/translator" destdir="build/classes" classpathref="compile.classpath"/>
    <echo> Translator compiled! </echo>
  </target>

  <target name="exporter" depends="translator" >
    <javac srcdir="src/pmml_export" destdir="build/classes" classpathref="compile.classpath" />
    <echo> Exporter compiled! </echo>
  </target>

  <target name="archive" depends="exporter" >
    <property name="manifest.mf" location="dist/manifest.txt" />
    <manifest file="${manifest.mf}" >
      <attribute name="Main-Class" value="pmml_export.PMML_Export"/>
    </manifest>
    <jar destfile="dist/pmml_export.jar" manifest="${manifest.mf}"
  basedir="build/classes" />
  </target>

  <target name="run" depends="archive">
    <java jar="dist/pmml_exporter.jar" fork="true">
      <classpath>
        <path refid="classpath"/>
        <path location="dist/pmml_exporter.jar"/>
      </classpath>
    </java>
  </target>
</project>

编译异常!
符号表编译!
解析器已编译!
Lexer编译!
翻译编译!
出口商编译!

使用
-jar
选项时,
-cp
-classpath
选项将被忽略。使用
-jar
选项嵌入类路径的正确方法是在jar的
MANIFEST.MF
文件中设置类路径指令。

使用
-jar
参数时,忽略
-cp
参数。您需要告诉Ant将类路径指定为JAR的
/META-INF/MANIFEST.MF
文件的
类路径
条目。什么操作系统?在Windows-cpa.jar上;Bjar@Op德西克尔:操作系统是Ubuntu 10.04,我在虚拟机播放器上运行它。主机操作系统是Windows Vista。这修复了它。我在清单规范中添加了这一行:谢谢Edwin@Erik,很高兴听到成功的消息。随时欢迎你。