从jar文件中运行特定的类主函数.进口似乎不起作用



我有一个jar文件,它的主类没有在清单中指定。所以我遵循了这里给出的答案:

如何从Jar中运行一个类,该类不是其清单文件中的主类

它似乎试图从这个类运行main。然而,从这个jar文件导入其他类似乎由于某种原因而中断。

这是我的问题的最小化版本:

jar tf test.jar

给出:

META-INF/
META-INF/MANIFEST.MF
ClassIWantToRun.class
something/
something/something/
something/something/something/ClassA.class

使用jd-gui查看ClassIWantToRun.class的来源似乎是:

import something.something.something.ClassA;
public class ClassIWantToRun
{
    public static void main(String[] args)
    {
        int x = ClassA.comeMethod();
    }
}

使用运行

java -cp test.jar ClassIWantToRun

给了我一个例外:

Exception in thread "main" java.lang.NoClassDefFoundError: com/ibm/OS4690/FlexosException
    at ClassIWantToRun.main(ClassIWantToRun.java:7)
Caused by: java.lang.ClassNotFoundException: com.ibm.OS4690.FlexosException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    ... 1 more

我只知道Java的基础知识,但似乎找不到ClassA,即使有一行:importsomething.something.ClassA我该怎么跑?

异常表示您需要将一些其他JAR添加到类路径中。test.jar中的类依赖于其他类。例如,在com.ibm.OS469.FlexosException.上

您可以尝试搜索另一个JAR文件(在您进行test.JAR的同一位置(,以便它包含FlexosException.class文件。找到后,将test.jar作为运行

java -cp test.jar;<path_to_another_jar_here> ClassIWantToRun

您将无法在OS4690环境之外运行程序,因为您依赖于内部OS4690库。如果您可以访问OS4690安装,您可能会找到所需的jar,但最终这些jar使用依赖于平台的库。如果您不是为特定的平台开发,请尽量避免使用这些依赖关系。

java -cp test.jar ClassIWantToRun

正在导入包含要运行的类的JAR。您还应该导入类路径中包含ClassA的JAR。

在您的情况下,我想是包含com/ibm/OS4690/FlexosException的JAR需要位于类路径

最新更新