Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Ant构建的Jar程序';看不到具有显式设置的类路径的类_Java_Ant_Classpath - Fatal编程技术网

Java Ant构建的Jar程序';看不到具有显式设置的类路径的类

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

下面是我的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>
  <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”罐子?

您应该选择:

  • 要么使用
    -jar
    ,JVM将使用jar内清单文件中指定的类路径。它还将使用清单来知道必须执行哪个主类。因此,不应该有
    -cp
    选项,也不应该指定类名:

    java -jar build/jar/hello.jar
    
  • 或者您使用
    -cp
    (或者
    -classpath
    ),您应该在类路径中添加每个jar(commons和hello),并且您应该指定要执行的主类名:

    java -cp lib/commons-lang-2.6.jar:build/jar/hello.jar test_package.Hello
    
在您的情况下,由于您尚未在清单中配置类路径,您应该选择第二个选项。

您应该选择:

  • 要么使用
    -jar
    ,JVM将使用jar内清单文件中指定的类路径。它还将使用清单来知道必须执行哪个主类。因此,不应该有
    -cp
    选项,也不应该指定类名:

    java -jar build/jar/hello.jar
    
  • 或者您使用
    -cp
    (或者
    -classpath
    ),您应该在类路径中添加每个jar(commons和hello),并且您应该指定要执行的主类名:

    java -cp lib/commons-lang-2.6.jar:build/jar/hello.jar test_package.Hello
    

在您的情况下,因为您没有在清单中配置类路径,所以应该选择第二个选项。

您不能同时指定
-jar
-cp
。您不能同时指定
-jar
-cp