【发布时间】:2020-01-12 01:09:56
【问题描述】:
我正在尝试安装作为 .jar 安装程序分发的 Mooshak。当我运行该文件时,它给了我以下关于缺少类的错误:
ifinlay@mooshak:~$ sudo java -jar MooshakInstaller.jar -cui
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/ArchiveException
at pt.up.fc.dcc.mooshak.installer.Installer.<init>(Installer.java:26)
at pt.up.fc.dcc.mooshak.installer.Installer.main(Installer.java:52)
... 5 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.compress.archivers.ArchiveException
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:436)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 7 more
所以它找不到 org/apache/commons/compress/archives/ArchiveException 类。但是我已经安装了这个库,并且在我的 CLASSPATH 中有以下内容:
ifinlay@mooshak:~$ echo $CLASSPATH
.:/usr/share/maven-repo/org/apache/commons/commons-compress/1.18/commons-compress-1.18.jar
CLASSPATH 中的这个 .jar 文件似乎确实包含有问题的类:
ifinlay@mooshak:~$ jar tvf /usr/share/maven-repo/org/apache/commons/commons-compress/1.18/commons-compress-1.18.jar
# ... other classes edited out
722 Fri Mar 01 16:57:28 UTC 2019 org/apache/commons/compress/archivers/ArchiveException.class
# ... other classes edit out
那么,当它确实 似乎在路径中时,为什么Java 找不到这个类呢?任何帮助都会太棒了,我真的为此摸不着头脑。
感谢阅读!
编辑:.jar 的清单文件如下所示:
Manifest-Version: 1.0
Rsrc-Class-Path: ./ junit.jar org.hamcrest.core_1.3.0.v201303031735.ja
r commons-compress-1.12.jar BrowserLauncher2-all-1_3.jar
Class-Path: .
Rsrc-Main-Class: pt.up.fc.dcc.mooshak.installer.Installer
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
所以这似乎意味着 commons-compress-1.12.jar 文件应该放在与安装程序相同的目录中。但这似乎不起作用...
【问题讨论】:
标签: java classpath apache-commons