4

マニフェストでメインクラスが指定されていない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.something.ClassAどうすればこれを実行できますか?

4

3 に答える 3

6

例外は、他のJARをクラスパスに追加する必要があることを示しています。test.jarのクラスは、他のクラスに依存しています。例:com.ibm.OS4690.FlexosException。

別のJARファイル(test.jarを取得したのと同じ場所)を検索して、FlexosException.classファイルが含まれるようにすることができます。それを見つけたら、test.jarを次のように実行します

java -cp test.jar;<path_to_another_jar_here> ClassIWantToRun
于 2013-01-18T13:50:02.963 に答える
2

内部OS4690ライブラリに依存しているため、OS4690環境の外部でプログラムを実行することはできません。OS4690インストールにアクセスできる場合は、必要なjarが見つかる可能性がありますが、最終的に、これらのjarはプラットフォームに依存するライブラリを使用します。その特定のプラットフォーム用に開発していない場合は、これらの依存関係の使用を避けるようにしてください。

于 2013-11-01T14:00:53.713 に答える
0
java -cp test.jar ClassIWantToRun

実行するクラスを含むJARをインポートしています。クラスパスにClassAを含むJARもインポートする必要があります。

あなたの場合、com/ibm/OS4690/FlexosExceptionクラスパス上にある必要があるのはJARであると思います

于 2013-01-18T13:50:16.490 に答える