-4

多くのインポートと依存関係を持つ Web アプリケーションをプログラム的にコンパイルしたい javax.tools を使用できます

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(System.in , System.out ,System.err, "D:/data/jeeViews/projects/seds/vcvd/main/com/vcvd/servlet/Dispatcher.java");

問題は、クラスをインポートせず、ClassNotFound例外をスローすることです。

何か案は?

4

2 に答える 2

1
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        compiler.run(System.in , System.out ,System.err, "/home/visruth/Desktop/Sample.java");

サンプル.java:

public class Sample {

    public static void main(String... args) {

    System.out.println("Hello world");

    }

}

上記のコードは私にとってはうまくいきます。

指定したパス"D:/data/jeeViews/projects/seds/vcvd/main/com/vcvd/servlet/Dispatcher.java"が有効であることを確認してください。にコードを投稿してくださいDispatcher.java。内部で他のクラスを参照すると、この例外も発生する可能性があるためです。たとえば、Sample.java が存在する場所と同じ場所に、別の Another.java ファイルも存在するとします。上記のSample.javaを次のように変更すると、クラスパスから別のクラスを参照するため、この例外が発生する可能性があります。Another another = new Another();

public class Sample {

    public static void main(String... args) {

    // makes exception as it is not in the class path.
    // to avoid exception make it available in the class path.
    Another another = new Another();

    System.out.println("Hello world");

    }

}

Another.java :

public class Another {

//codes........

}

より良い解決策は、ant のようなビルド ツールを使用することです。

于 2012-12-25T09:34:50.673 に答える
0

ClassNotFound例外は基本的にそれが言うことです。

コンパイルに必要なファイルが見つかりません。

これは2つのことのうちの1つを意味します

  1. あなたは間違った場所を指しています(うまくいけばそうではありません)

  2. コンパイルされていないファイルのパッケージまたは他のクラスを使用しています。例: PackageCクラスを使用する場合、クラスをコンパイルする前にAPackageCクラスがコンパイルされていることを確認する必要があります。A

(これは、インポートするすべてのクラスに当てはまります)

于 2012-12-25T09:38:57.583 に答える