好吧,我正在尝试使用 Ant 配置项目,这就是我得到的:
D:\Dropbox\EclipseWorkspace\PIRS\src\lib>dir
Volume in drive D is WinMedia
Volume Serial Number is 8ED9-B662
Directory of D:\Dropbox\EclipseWorkspace\PIRS\src\lib
2012.11.20 16:11 <DIR> .
2012.11.20 16:11 <DIR> ..
2012.10.16 22:03 315.805 commons-lang3-3.1.jar
2012.10.23 23:08 176.897 commons-validator-1.4.0.jar
2012.11.20 15:30 <DIR> hibernate
2012.11.16 04:48 253.160 junit-4.10.jar
2012.10.22 02:02 489.883 log4j-1.2.17.jar
2012.10.31 23:00 1.581.066 mockito-all-1.9.5.jar
2012.11.02 19:54 651.643 mybatis-3.1.1.jar
2012.11.01 04:37 832.960 mysql-connector-java-5.1.22-bin.jar
7 File(s) 4.301.414 bytes
3 Dir(s) 7.277.907.968 bytes free
D:\Dropbox\EclipseWorkspace\PIRS\src\lib>cd ../..
D:\Dropbox\EclipseWorkspace\PIRS>
D:\Dropbox\EclipseWorkspace\PIRS>
D:\Dropbox\EclipseWorkspace\PIRS>ant run
Buildfile: D:\Dropbox\EclipseWorkspace\PIRS\build.xml
init:
compile:
[javac] Compiling 1 source file to D:\Dropbox\EclipseWorkspace\PIRS\build
jar:
[jar] Building jar: D:\Dropbox\EclipseWorkspace\PIRS\dist
\jar\PIRS.jar
run:
[java] Exception in thread "main" java.lang.NoClassDefFoundError: org/apach
e/log4j/Logger
[java] at com.nortal.pirs.userinterface.fakestarter.FakeUserInterface.<
init>(Unknown Source)
[java] at com.nortal.pirs.userinterface.fakestarter.FakeUserInterface.m
ain(Unknown Source)
[java] Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
[java] at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
[java] at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
[java] ... 2 more
[java] Java Result: 1
BUILD SUCCESSFUL
Total time: 2 seconds
D:\Dropbox\EclipseWorkspace\PIRS>
首先你可以看到我在文件夹 src/lib 中有 log4j,在第二部分你可以看到它在运行时没有找到。很奇怪,因为它编译得很好,它似乎无法在运行时找到它。
我的 build.xml :
<?xml version="1.0" encoding="UTF-8"?>
<project name="PIRS" default="dist" basedir=".">
<description>PIRS</description>
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<property name="lib.dir" location="src/lib"/>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
<fileset dir="${lib.dir}" includes="*.jar"/>
</path>
<target name="init">
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init">
<javac includeantruntime="false" srcdir="${src}" destdir="${build}">
<classpath>
<path refid="classpath"/>
</classpath>
</javac>
</target>
<target name="jar" depends="compile" description="generate the jar">
<mkdir dir="${dist}/jar"/>
<jar destfile="${dist}/jar/PIRS.jar" basedir="${build}">
<manifest>
<attribute name="Main-Class" value="com.nortal.pirs.userinterface.fakestarter.FakeUserInterface"/>
</manifest>
</jar>
</target>
<target name="clean" description="clean up" >
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
<target name="run" depends="jar">
<java jar="${dist}/jar/PIRS.jar" fork="true">
<classpath refid="classpath"/>
</java>
</target>
</project>
实际上这条线似乎没有改变任何东西。
嗯,有什么想法吗?提前致谢。