外部 Java クラスの動的コンパイルとロード
多くのアプリケーションでは、コードを動的にロードして実行する機能が必要です。これは、多くの場合、外部 Java クラスをコンパイルしてロードすることによって実現されます。
JavaCompiler: 動的コンパイルのための多用途ツール
JavaCompiler クラスは、Java ソース コードをコンパイルするための便利なインターフェイスを提供します。 。使用方法は次のとおりです:
ロードおよびコンパイルされたクラスの実行
コンパイルが成功すると、コンパイルされたクラスがクラスは、カスタム クラス ローダーを使用して JVM にロードできます。これは次のように行われます:
実装例
次のコード例は、Java クラスを動的にコンパイルおよびロードするプロセスを示しています。
import javax.tools.*; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class DynamicCompilation { public static void main(String[] args) { // Prepare the Java source file String sourceCode = "..."; // Replace this with the plugin's source code // Create the .java file File helloWorldJava = new File("HelloWorld.java"); try (FileWriter writer = new FileWriter(helloWorldJava)) { writer.write(sourceCode); } catch (IOException e) { e.printStackTrace(); return; } // Set up the JavaCompiler JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); // Set up the compilation options List<String> optionList = new ArrayList<>(); optionList.add("-classpath"); optionList.add(System.getProperty("java.class.path")); // Add the necessary classpath here // Compile the source code JavaFileObject compilationUnit = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(helloWorldJava)).get(0); CompilationTask task = compiler.getTask(null, fileManager, null, optionList, null, Arrays.asList(compilationUnit)); if (!task.call()) { for (Diagnostic<?> diagnostic : task.getDiagnostics()) { System.out.println(diagnostic.getMessage(null)); } return; } // Load and execute the compiled class try { URLClassLoader classLoader = new URLClassLoader(new URL[]{new File("./").toURI().toURL()}); Class<?> loadedClass = classLoader.loadClass("HelloWorld"); Object instance = loadedClass.newInstance(); // Execute the required method on the instance // ... } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IOException e) { e.printStackTrace(); } } }
これらの手順に従い、JavaCompiler クラスと URLClassLoader クラスを利用することで、外部 Java クラスを動的にコンパイルしてロードできます。アプリケーションで柔軟なカスタマイズとプラグイン機能を有効にします。
以上が外部 Java クラスを動的にコンパイルしてロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。