したがって、javaには、javaソースコードを.classファイルにコンパイルするための専用の組み込みライブラリがあり、それはにありjavax.tools
ます。それで、私はあなたがそれをどのように正確に機能させるのか疑問に思いました。javadocを読みましたが、そこにいくつかの例がありますが、それらの例を使用するとエラーが発生します。
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
StandardJavaFileManager
これは、より多くのことを実行できるクラスのインスタンスを取得するためにoracleが提供する例です。ただし、そのコードの最初の行でいくつかの問題が発生しています。しようとするとToolProvider.getSystemJavaCompiler();
、常にnullが返されます。そのメソッドのjavadocsには、「このプラットフォームで提供されているコンパイラを返すか、コンパイラが提供されていない場合はnullを返します」と書かれています。ただし、のインスタンスを取得する他の方法を示すことはありませんJavaCompiler
。私は他の多くの方法を試しました。たとえば、を使用してServiceLoader
参照を見つけることができましたが、勝つことはできませんでした。これを機能させるにはどうすればよいですか?