Java Ant构建的Jar程序';看不到具有显式设置的类路径的类
下面是我的build.xml:Java Ant构建的Jar程序';看不到具有显式设置的类路径的类,java,ant,classpath,Java,Ant,Classpath,下面是我的build.xml: <?xml version="1.0"?> <project name="test" default="hello_jar"> <path id="commons" > <fileset dir="lib"> <include name="commons-lang-2.6.jar"/> </fileset> </path> <tar
<?xml version="1.0"?>
<project name="test" default="hello_jar">
<path id="commons" >
<fileset dir="lib">
<include name="commons-lang-2.6.jar"/>
</fileset>
</path>
<target name="compile">
<mkdir dir="build/classes"/>
<javac srcdir="src/test_package" destdir="build/classes" classpathref="commons"/>
</target>
<target name="hello_jar" depends="compile">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/hello.jar">
<fileset dir="build/classes">
<include name="test_package/Hello.class"/>
</fileset>
<manifest>
<attribute name="Main-Class" value="test_package.Hello"/>
</manifest>
</jar>
</target>
我得到以下信息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/math/Range
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2451)
at java.lang.Class.getMethod0(Class.java:2694)
at java.lang.Class.getMethod(Class.java:1622)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.math.Range
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 6 more
为什么它找不到“commons lang”罐子?您应该选择:
- 要么使用
,JVM将使用jar内清单文件中指定的类路径。它还将使用清单来知道必须执行哪个主类。因此,不应该有-jar
选项,也不应该指定类名:-cp
java -jar build/jar/hello.jar
- 或者您使用
(或者-cp
),您应该在类路径中添加每个jar(commons和hello),并且您应该指定要执行的主类名:-classpath
java -cp lib/commons-lang-2.6.jar:build/jar/hello.jar test_package.Hello
- 要么使用
,JVM将使用jar内清单文件中指定的类路径。它还将使用清单来知道必须执行哪个主类。因此,不应该有-jar
选项,也不应该指定类名:-cp
java -jar build/jar/hello.jar
- 或者您使用
(或者-cp
),您应该在类路径中添加每个jar(commons和hello),并且您应该指定要执行的主类名:-classpath
java -cp lib/commons-lang-2.6.jar:build/jar/hello.jar test_package.Hello
在您的情况下,因为您没有在清单中配置类路径,所以应该选择第二个选项。您不能同时指定
-jar
和-cp
。您不能同时指定-jar
和-cp
。