1

Netbeans で 2 つの Java アプリケーションを開発していますが、最初のアプリケーションで 2 番目のアプリケーションを実行する必要があります。次のコードを使用してこれを行います。

ProcessBuilder pb = new ProcessBuilder("java", "Second App Main Class Name");
pb.start();

問題は、2 番目のアプリには、Netbeans で参照として追加した膨大な数の依存関係があることです。しかし、上記のコードを使用して実行すると、Java は明らかにそれらを検出しません。

私のプロジェクトでは多くのライブラリを使用しているため、Classpathどうにかしてすべてを自動的に処理できますか?

4

3 に答える 3

1

ここでの問題は、2 番目の Java アプリケーションの環境にクラスパスが実際には構成されていないことです。そのため、メイン クラス自体を呼び出すことはできますが (前述のとおり)、他の依存関係は見つかりません。

また、Maven や Ant などを使用していても、別々のクラスパスを持つ 2 つの別々の Java アプリケーションを構築している場合 (ただし、一方が他方のクラスパスを知っている場合、ProcessBuilder にどのように2 番目のアプリケーションに適した JAR ファイルとクラス ファイルを見つけるには、次のようにします。

public int exec(Class<?> clazz) throws IOException,
                                           InterruptedException {
    String javaHome = System.getProperty("java.home");
    String javaBin = javaHome +
            File.separator + "bin" +
            File.separator + "java";

    /* This is where you want to set up your Classpath for the second app */
    String classpath = System.getProperty("java.class.path");
    String className = clazz.getCanonicalName();

    ProcessBuilder builder = new ProcessBuilder(
            javaBin, "-cp", classpath, className);

    Process process = builder.start();
    process.waitFor();
    return process.exitValue();
}

しかし、なぜ NetBeans からアプリを起動するのか疑問に思います。最終的には両方のアプリをコマンド ラインから起動する必要があると思われます。コマンドラインからアプリを起動できない場合は、Java からもアプリを起動できません。ProcessBuilder は、システム上の他のプログラムのコマンドライン ランチャーとして動作します。

于 2012-08-12T14:58:04.890 に答える
0

Maven や Ant などのビルド ツールを使用して、ツールに応じてプロジェクトを Maven または Ant プロジェクトとしてインポートできます。Maven は推移的な依存関係を非常にうまく処理します。Maven ドキュメントについては、このリンクを確認してください: http://maven.apache.org/

于 2012-08-12T14:03:18.897 に答える
0

main新しいプロセスを生成するのではなく、2 番目のアプリのメソッドを直接実行するだけです。外部プロセスの処理は、特にコンソールから読み取る場合はやや複雑です。

于 2012-08-12T12:08:55.483 に答える