簡體   English   中英

從jar文件中運行特定的類main函數。導入似乎不起作用

[英]running specific class main function from jar file. import seems not working

我有一個jar文件沒有在manifest中指定它的主類。 所以我按照這里給出的答案:

如何從Jar運行一個類,它不是Manifest文件中的Main-Class

它似乎試圖從這個類運行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:import something.something.something.ClassA如何才能運行?

該異常表示您需要將其他一些JAR添加到類路徑中。 test.jar中的類依賴於其他類。 例如,在com.ibm.OS4690.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需要在你的類路徑上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM