0
  • IntelliJ 12.0.4 Community Edition を使用しています。
  • DB というメイン クラス名を持つ Java コンソール アプリを作成しました。
  • DB.jar という実行可能な jar ファイルにパッケージ化しました。
  • そのアプリでは、JDBC を使用して Oracle DB に接続します。
  • Intellij のプロジェクト構造 (モジュール、ライブラリ) を介して、必要な JDBC jar ファイルを DB.jar にパッケージ化しました。

  • IntelliJ 内からアプリを実行すると、正常に実行されます

  • DB.jar をいくつかのディレクトリにコピーし、「java -jar DB.jar」で実行すると、oracle.jdbc.driver.OracleDriver で ClassNotFound 例外が発生します。
  • DB.jar を調べたところ、jdbc jar ファイル (ojdbc6.jar、ojdbc14.jar) は DB.jar にあります。
  • 何かご意見は?
4

1 に答える 1

0

通常、実行可能 jar 内の jar はクラスパス上にありません。

それらを DB.jar と同じフォルダーに配置して、次のことを行うことができます。

java -cp DB.jar;ojdbc6.jar;ojdbc14.jar <MainClass goes here>

そして、それを実行する必要があります。

Class-Pathjar 内の Manifest.MF ファイルにエントリを配置して、コンピューターのファイル システム内の DB.jar の場所に関連する他の jar を参照することもできます。他の 2 つの jar ファイルを参照すると、実行できますjava -jar DB.jar <MainClass goes here>(2 つの jar ファイルが適切な場所にあると仮定します。

ここでは、自分がやりたいこと (そして他の多くの人が何年も望んでいたこと) を実行できないことに対する一般的なフラストレーションについて、いくつかの議論があります。

JAR 内の JAR を含むクラスパス

メインクラスについて説明する

コマンド ラインから Java アプリケーションを実行すると、実行が開始されるクラスがいくつかあります。次のようになります。

package com.mycompany.app;

public class StartHere {

    public static void main(String[] args) {
        // Your code goes here ...
    }
}

この例がアプリケーションを開始するクラスである場合は、コマンド ライン this を使用してアプリケーションを開始します。これは、クラスパス上の jar 内の適切なパッケージの場所に StartHere クラスがあることを前提としています。

java -cp DB.jar;ojdbc6.jar;ojdbc14.jar com.mycompany.app.StartHere

これにより、同じ jar に複数のアプリケーションを含めることができることに注意してください。メソッドを使用して複数のクラスを作成main()し、コマンドラインに表示されるさまざまな開始クラスでそれらを実行するだけです。

于 2013-08-09T18:54:25.400 に答える