外部 Java クラスを動的にコンパイルおよびロードする方法
プログラムのプラグインの開発は、プログラムを使用してプラグインをコンパイルおよびロードすることで簡素化できます。自体。このガイドでは、プログラムに含まれる事前定義インターフェースを拡張する外部 Java クラスを動的にコンパイルおよびロードするという特定の課題について説明します。
背景:
の主な目的このプログラムは、ユーザーがカスタム プラグインを作成できるようにすることを目的としています。これにより、テキスト ペイン内でコーディングできるようになり、それが継承されたインターフェイスの特定のメソッドにコピーされます。作成されたコードは Java ファイルとして保存され、コンパイルできるようになります。ただし、クラスパスに継承されたインターフェイスがないため、プログラムは外部ファイルをコンパイルしてロードしようとするとエラーが発生します。
解決策:
これを解決するにはこの問題を解決するには、Java の JavaCompiler API を利用する必要があります。次の手順はプロセスの概要です:
外部クラスをコンパイルします:
// Setup the compiler with the required options JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null); // Set the classpath to include your program's package List<String> optionList = new ArrayList<>(); optionList.add("-classpath"); optionList.add(System.getProperty("java.class.path") + File.pathSeparator + "<path-to-your-interface>"); // Compile the external Java file Iterable<? extends JavaFileObject> compilationUnit = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(externalJavaFile)); JavaCompiler.CompilationTask task = compiler.getTask( null, fileManager, diagnostics, optionList, null, compilationUnit); if (task.call()) { System.out.println("Compilation successful!"); } else { // Handle compilation errors } fileManager.close();
ロードおよびコンパイルしたものを実行するクラス:
// Create a custom class loader to load the compiled class URLClassLoader classLoader = new URLClassLoader(new URL[]{new File("./").toURI().toURL()}); // Load the compiled class by its fully qualified name Class<?> loadedClass = classLoader.loadClass("<package-name>.<class-name>"); // Create an instance of the loaded class Object obj = loadedClass.newInstance(); // Check if the object implements the required interface if (obj instanceof <your-interface>) { // Cast the object to the interface <your-interface> interfaceInstance = (your-interface)obj; // Execute the method from the interface interfaceInstance.doSomething(); }
これらの手順に従うと、外部 Java クラスを動的にコンパイルしてロードできるため、ユーザーはプラグインを作成してプログラムにシームレスに統合できます。
以上が事前定義されたインターフェイスを拡張して外部 Java クラスを動的にコンパイルおよびロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。