我正在运行Ant脚本来生成JAR文件但是当我执行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
这是我的蚂蚁脚本:
<?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文件
当我使用eclipse生成Runnable 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文件我都会感激
答案 0 :(得分:0)
你需要在classpath,即lib文件夹下有log4j
jar。如果它已经存在,那么类路径没有正确设置
尝试
<attribute name="Class-Path" value="lib" />