gpt4 book ai didi

java - 通过命令行向jar文件添加外部依赖

转载 作者:行者123 更新时间:2023-12-01 16:56:31 26 4
gpt4 key购买 nike

阅读后this问题 我已经设法运行一个 .jar 文件,该文件的外部依赖项位于 jar 文件中:

/usr/lib/jvm/java-8-jdk/bin/java -classpath /usr/local/bin/kiaragen.jar:/home/kiara/AppLab/KIARA/kiaragen/src/main/resources/org/fiware/kiara/generator/idl/templates/*:/usr/lib/jvm/java-8-jdk/jre/lib/*:/home/kiara/AppLab/KIARA/kiaragen/lib/*  org.fiware.kiara.generator.kiaragen

其中/usr/local/bin/kiaragen.jar是要执行的文件。现在,我尝试运行依赖于 .class 文件的不同版本:

/home/kiara/AppLab/KIARA/IDL-Parser/target/classes/com/eprosima/idl/parser/exception/ParseException.class

将文件添加到类路径:

/usr/lib/jvm/java-8-jdk/bin/java -classpath /usr/local/bin/kiaragen-0.2.0.jar:/home/kiara/AppLab/KIARA/IDL-Parser/target/classes/com/eprosima/idl/parser/exception/ParseException.class:/home/kiara/AppLab/KIARA/kiaragen/src/main/resources/org/fiware/kiara/generator/idl/templates/*:/usr/lib/jvm/java-8-jdk/jre/lib/*:/home/kiara/AppLab/KIARA/kiaragen/lib/*  org.fiware.kiara.generator.kiaragen

给出以下异常:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: com/eprosima/idl/parser/exception/ParseException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: com.eprosima.idl.parser.exception.ParseException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more

为什么?

.jar 的 list 文件与之前相同:

$ cat META-INF/MANIFEST.MF 
Manifest-Version: 1.0
Main-Class: org.fiware.kiara.generator.kiaragen

如何将 .class 文件添加到类路径?

最佳答案

您不明白类路径是什么。类路径是 jar 文件和目录的集合,Java 在其中查找类(以及类加载器加载的其他资源)。

如果程序使用类com.foo.Bar,则类路径中必须不是文件/somedirectory/com/foo/Bar .class。类路径中必须包含目录 /somedirectory。或者包含该类的 jar 文件。

类加载器将从该基目录或 jar 文件中查找与类名相对应的文件:

com.foo.Bar --> com/foo/Bar.class

这是至关重要的,因为它允许 Java 同时访问数百个类,而不必在类路径中列出这数百个类文件。类路径中您所需要的只是包含数百个类的目录或 jar。

另请注意,/usr/lib/jvm/java-8-jdk/jre/lib/* 也不能位于类路径中。 Java 知道在哪里可以找到 JRE 本身的库。

关于java - 通过命令行向jar文件添加外部依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32035233/

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