以编程方式编译多个文件时出现错误

时间:2017-02-20 15:13:27

标签: java compiler-errors javac

我必须以编程方式编译数千个动态生成的Java文件。其中一些文件可能与其他文件有依赖关系;但这不是一个要求,因此混合中可能还有简单的孤立Java文件。 现在,我正在使用JavaCompiler API和Diagnostics;以及一个复杂版本中的BundleFileManager。

但是我刚刚发现,如果我尝试在同一个CompilationUnit中编译3个文件(每个文件都是隔离的,没有内部依赖性),其中一个文件有任何编译错误;没有生成类。我原以为Java编译器会生成2个正确的类而不是错误的类。 有人能解释我为什么吗?如果这是Java编译器的技术约束,或者是否有某些选项可以像(eagerApproach)那样放置?

我添加了我的虚拟原型的代码:

public static void compileSetOfFiles(String[] files)
{
    File[] srcs = new File[files.length];
    int i = 0;
    for (String fil : files)
    {
        srcs[i] = new File(files[i]);
        i++;
    }
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
    Iterable<? extends JavaFileObject> compUnits =  fileManager.getJavaFileObjects(srcs);
     CompilationTask cU = compiler.getTask(null, fileManager, null, null, null, compUnits);   
     Boolean compRes = cU.call();
    if(compRes == true){
        System.out.println("Compilation has succeeded");
    }else{
        System.out.println("Compilation error");
        try {
            fileManager.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

可以使用简单的主要传递作为参数来运行哪个文件路径进行编译。在我的情况下&#34; ./ resources / Correct1.java&#34; &#34; ./资源/ Correct2.java&#34; &#34; ./资源/ Incorrect1.java&#34;其中

Correct1是:

public class Correct1 {

    public void test()
    {
        System.out.println("Hello");
     }
}

Correct2是:

public class Correct2 
{
    private String hello;


    public Correct2(String say)
    {
       hello = say;
    }

    @Override
    public String toString() {
      return hello;
    }
 }

错误1是:

public class Incorrect1 
{
   as;
}

0 个答案:

没有答案