2

新しいjarファイルを作成します。を使用してjarファイルを実行すると

java -jar UpdateAvailable.jar com.dao.mysql.UpdateAvailable

次の例外が発生しました。

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/jettison/json/JSONException
Caused by: java.lang.ClassNotFoundException: org.codehaus.jettison.json.JSONException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

しかし、サポートするすべての jar をUpdateAvailable.jar. 私の要件は、次のように、サポートするjarを指定せずにjarファイルを実行することです

java -jar UpdateAvailable.jar com.dao.mysql.UpdateAvailable
4

3 に答える 3

0

jar ファイルをどのようにパッケージ化しているかはわかりませんが、ファイルとすべてのサポート ライブラリを 1 つの jar にパッケージ化するには、One-Jar のようなものが必要なようです。One-Jar には、実行可能 jar ファイルに含まれるすべての jar をロードできる独自のクラスローダーが付属しています。

構成はかなり簡単で使いやすいです。Maven を使用している場合は、one-jar maven プラグインを使用して、含めるライブラリを構成することができます。

JarJarProGuardなど、One-Jar の代わりに使用できる他の同様のパッケージもあります。また、この SO questionを簡単に見てください。

于 2012-09-25T14:03:01.457 に答える
0

実行可能 jar では、jar 内のサポート jar ファイルを読み取ることができませんでした。したがって、すべてのサポート jar をフォルダーに保持し、実行可能 jar を同じディレクトリーに配置します。そして、「MANIFEST.MF」ファイルに「スペースで区切られたサポートjarファイル」として「Class-Path」を追加します。jarを次のように実行します

java -jar UpdateAvailable.jar com.dao.mysql.UpdateAvailable
于 2012-09-28T05:43:58.267 に答える
0

JAR ファイルと ClassPath を操作する際に覚えておくべきいくつかのポイントを次に示します。

  • JVM がクラスを検索できるようにするには、クラスを含むディレクトリまでクラスパスを設定する必要があります。この場合、JAR があります。
  • したがって、Jar ファイル名までのパスを指定する必要があります。
  • さて、現在実行中のJarファイル内にJarファイルがあるため、Jar内のフォルダーまでクラスパスを設定できないため、基本的に内部のJarファイルのクラスパスを設定することはできません..
  • したがって、明らかに JVM は内部の Jar 内のクラスを認識できません。
  • したがって、必要な JAR ファイルがすべての JAR ファイルの外側にあることを確認してください (つまり、ネストされた JAR ファイルは避けてください)。
于 2012-09-25T12:33:22.687 に答える