【发布时间】:2015-11-06 06:03:19
【问题描述】:
处理需要编译多个源文件(.java) 并在运行时生成相应的类文件(.class) 的应用程序,这发生在应用程序启动时。 p>
目前使用以下代码生成类:
int errorCode = com.sun.tools.javac.Main.compile(new String[] {
"-cp", classPath,
"-d", pOutputPath,
srcFile.getAbsolutePath() },new PrintWriter(out));
每个 *.java 文件几乎都只有大约 40 行代码和一个方法。但是上面给出的代码编译时间大约是每个文件 2 秒。
应用程序有超过 1000 个或有时 2000 个 java 文件。因此应用程序启动时间超过 2000 或 4000 秒,这是不可取的。
com.sun.tools.javac.Main.compile 的任何替代方案?
还是一种更好或更快的运行时编译和类文件生成方式?
我不能使用多线程,因为环境是单线程的。
【问题讨论】:
-
你不能使用
CachedThreadPool并触发作业来编译文件吗? -
实际上一个线程正在遍历目录中的文件并进行编译。如果我也有多个线程,那么我需要有很多线程安全措施,如锁、同步等。寻找更快的 Main.compile 替代方案..
-
你真的需要每次启动都编译类吗?
标签: java javac .class-file runtime-compilation