Java动态编译

本文介绍了如何通过JSR199引入的Java编译器API进行动态编译Java代码,并提供了JDK1.6及更高版本的实现方式。包括使用JDK内置工具和EclipseJDTCore编译器,强调确保tools.jar在应用的CLASSPATH中。同时,演示了使用com.sun.tools.javac.Main工具进行编译的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 JSR 199引入了Java编译器API。如果使用JDK 6 的话,可以通过此API来动态编译Java
代码。

public class CompilerTest {
               public static void main(String[] args) throws Exception

                         {
                         String source = "public class Main { public static void main(String[] args) {System.out.println(\"Hello World!\");} }";
                        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
                        StandardJavaFileManager fileManager =compiler.getStandardFileManager(null, null, null);
                        StringSourceJavaObject sourceObject = new  CompilerTest.StringSourceJavaObject("Main", source);
                        Iterable< extends JavaFileObject> fileObjects =Arrays.asList(sourceObject);
                       CompilationTask task = compiler.getTask(null, fileManager, null,null, null, fileObjects);
                        boolean result = task.call();
                        if (result) {
                                        System.out.println("编译成功。");
                                         }
                        }
                   static class StringSourceJavaObject extends SimpleJavaFileObject {
                                    private String content = null;
                                    public StringSourceJavaObject(String name, String content) throwsURISyntaxException

                                        {
                                             super(URI.create("string:///" + name.replace('.','/') +
                                             Kind.SOURCE.extension), Kind.SOURCE);
                                             this.content = content;
                                        }
                                  public CharSequence getCharContent(booleanignoreEncodingErrors) throws IOException

                                        {
                                                          return content;
                                        }
                         }
             }

如果不能使用JKD1.6可以使用可以使用JDK 中的工具类com.sun.tools.javac.Main,不过该工具类只能编译存放在磁盘上的文件,类似于直接使用javac命令。

另外一个可用的工具是Eclipse JDT Core提供的编译器。这是Eclipse Java开发环境使用的增量式Java编译器,支持运行和调试有错误的代码。该编译器也可以单独使用。

使用这些动态编译的方式的时候,需要确保JDK中的tools.jar在应用的 CLASSPATH中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值