因此,我正在构建一个使用内置的JavaCompiler API来编译.java文件目录的程序。我让它通过一个目录进行解析来编译文件,甚至编译它们,只是没有按我需要的顺序编译。我拿回了经典的“找不到符号”,因为某些类相互依赖。所以一组用javac编译得很好的文件在我的程序中失败了。
我需要一种方法来按一定的顺序编译它们(我的最后一个选项实际上是通过文件解析以获取引用,但我不希望如此),或者同时进行编译。
这是我的密码:
import javax.tools.*;
import java.io.*;
import java.util.*;
public class SimpleCompileTest
{
public static void main(String[] args)
{
try{
File[] files;
File dir = new File("Thing");
files = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".java");
}
});
File file = new File("Errors.txt");
try{
FileOutputStream errorStream = new FileOutputStream("Errors.txt");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
for(int i = 0; i < files.length; i++)
{
int compilationResult = compiler.run(null, null, errorStream, files[i].getPath());
if(compilationResult == 0){
System.out.println("Compilation is successful");
}else{
System.out.println("Compilation Failed");
}
}
}catch(Exception e)
{
System.out.println("error in compiler");
}
}catch(Exception h)
{
System.out.println("error in filename");
}
}
}编辑:通配符(即*.java)不工作在JavaCompiler.
答:从注释中,我尝试向编译器传递一个包含所有文件的所有路径的String[],而不是String[]()。效果很好!谢谢!
发布于 2015-03-05 22:23:19
从注释中,我尝试向编译器传递一个包含所有文件的所有路径的String[],而不是String[]()。以下是解决办法。
import javax.tools.*;
import java.io.*;
import java.util.*;
public class SimpleCompileTest
{
public static void main(String[] args)
{
try{
File[] files;
File dir = new File("Thing");
files = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".java");
}
});
String[] filenames = new String[files.length];
for(int i = 0; i < files.length; i++)
filenames[i] = files[i].getName();
File file = new File("Errors.txt");
try{
FileOutputStream errorStream = new FileOutputStream("Errors.txt");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, errorStream, filenames);
if(compilationResult == 0){
System.out.println("Compilation is successful");
}else{
System.out.println("Compilation Failed");
}
}catch(Exception e)
{
System.out.println("error in compiler");
}
}catch(Exception h)
{
System.out.println("error in filename");
}
}
}https://stackoverflow.com/questions/28887575
复制相似问题