Seb*_*ebi 0 java jar intellij-idea maven
读完这个问题后,我设法运行了一个.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
Run Code Online (Sandbox Code Playgroud)
其中/usr/local/bin/kiaragen.jar是要执行的文件.现在,我正在尝试运行依赖于.class文件的不同版本:
/home/kiara/AppLab/KIARA/IDL-Parser/target/classes/com/eprosima/idl/parser/exception/ParseException.class
Run Code Online (Sandbox Code Playgroud)
将文件添加到类路径:
/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
Run Code Online (Sandbox Code Playgroud)
给出以下例外:
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
Run Code Online (Sandbox Code Playgroud)
为什么?
.jar的清单文件与以前相同:
$ cat META-INF/MANIFEST.MF
Manifest-Version: 1.0
Main-Class: org.fiware.kiara.generator.kiaragen
Run Code Online (Sandbox Code Playgroud)
如何将.class文件添加到类路径?
你不明白类路径是什么.类路径是jar文件和目录的集合,其中Java查找类(以及类加载器加载的其他资源).
如果程序使用该类com.foo.Bar
,则类路径中必须包含的不是文件/somedirectory/com/foo/Bar.class
.类路径中必须包含的是目录/somedirectory
.或者包含该类的jar文件.
然后,从该基本目录或jar文件中,类加载器将查找与类名对应的文件:
com.foo.Bar --> com/foo/Bar.class
Run Code Online (Sandbox Code Playgroud)
这是必不可少的,因为它允许Java同时访问数百个类,而无需在类路径中列出数百个类文件.在类路径中你需要的只是包含数百个类的目录或jar.
另请注意,也/usr/lib/jvm/java-8-jdk/jre/lib/*
不能在类路径中.Java知道在哪里可以找到JRE本身的库.
归档时间: |
|
查看次数: |
536 次 |
最近记录: |