gpt4 book ai didi

java - Ant 构建的 Jar 程序看不到具有显式设置类路径的类

转载 作者:行者123 更新时间:2023-12-01 23:57:03 24 4
gpt4 key购买 nike

所以,这是我的 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>

成功构建 jar 后,我使用显式设置的类路径执行它:

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

我得到以下信息:

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?

最佳答案

您应该选择:

  • 要么使用-jar,JVM将使用jar内的 list 文件中指定的类路径。它还将使用 list 来了解必须执行哪个主类。因此不应该有 -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

就您而言,由于您尚未在 list 中配置类路径,因此您应该选择第二个选项。

关于java - Ant 构建的 Jar 程序看不到具有显式设置类路径的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15435308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com