我已经搜索了几个小时,并阅读了很多类似的问题,例如this和this。 现在我将我的代码简化为几行,所以问题应该是显而易见的 - 但我仍然无法解决它。
以下是我的两个简单类:
package ant;
import my.package.util.exception.UtilTest;
public class Debug {
public static void main(String[] args) {
System.out.println(UtilTest.myTest());
}
}
package my.package.util.exception;
public class UtilTest {
public static boolean myTest(){
return true;
}
}
我构建了my.package.util.jar并将其放入项目目录中的目录lib中。 现在我运行ant build脚本(见下文)为Debug类构建jar。建成是成功的,MANIFEST.MF是:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.8.0_20-b26 (Oracle Corporation)
Main-Class: ant.Debug
Class-Path: lib/my.package.util.jar
末尾有空行。
这是build.xml:
<?xml version="1.0"?>
<project>
<path id="my.classpath">
<fileset dir="lib/" includes="**/*.jar"/>
<pathelement location="."/>
<pathelement location="bin"/>
</path>
<target name="compile">
<mkdir dir="build/classes"/>
<javac includeantruntime="false" srcdir="src" destdir="build/classes" encoding="UTF-8">
<classpath refid="my.classpath"/>
</javac>
</target>
<target name="jar">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/Debug.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="ant.Debug"/>
<attribute name="Class-Path" value="lib/my.package.util.jar"/>
<!-- EDIT: to solve the issue, use value="../../lib/my.package.util.jar"/-->
</manifest>
</jar>
</target>
<target name="debug">
<java classpath="${my.classpath}" jar="build/jar/Debug.jar" fork="true">
<arg value="${file}"/>
</java>
</target>
</project>
现在运行“ant debug”,我得到:
debug:
[java] Exception in thread "main" java.lang.NoClassDefFoundError: my/package/util/exception/UtilTest
[java] at ant.Debug.main(Unknown Source)
[java] Caused by: java.lang.ClassNotFoundException: my.package.util.exception.UtilTest
[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:424)
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[java] ... 1 more
[java] Java Result: 1
BUILD SUCCESSFUL
Total time: 1 second
谁可以提供帮助? : - /
任何提示都表示赞赏!
答案 0 :(得分:0)
编辑:您不能这样做,因为如果您使用-jar
参数:
JAR文件是所有用户类的源,其他用户类路径设置将被忽略(source)。
答案 1 :(得分:0)
问题已解决。
我终于明白我必须将类路径设置为目标jar文件,而不是相对于build.xml。 所以我必须在类路径前添加../../。
<manifest>
<attribute name="Main-Class" value="ant.Debug"/>
<attribute name="Class-Path" value="../..lib/my.package.util.jar"/>
</manifest>