2014-11-04 50 views
1

我試圖創建一個類來編譯一些.java,我將在運行時創建,但是我無法讓它正常工作。Java編譯任務和類路徑選項不工作

這裏是我的代碼

File bin = new File(args[args.length-1]); 

    System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_60"); 
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

    StandardJavaFileManager standardJavaFileManager = compiler.getStandardFileManager(null, null, null); 

    try { 
     standardJavaFileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(bin)); 
    } catch (IOException e) { 
     System.err.println("Invalid bin directory"); 
     e.printStackTrace(); 
    } 

    List<String> options = new ArrayList<String>(); 

    options.add("-Xlint:unchecked"); 
    options.add("-classpath"); 
    options.add("e:\\ParentProject.jar"); 

    System.out.println(options); 

    CompilationTask compilationTask = compiler.getTask(null, standardJavaFileManager, null, options, null, standardJavaFileManager.getJavaFileObjectsFromFiles(archives)); 

    compilationTask.call(); 

我嘗試編譯擴展一類就是在ParentProject.jar一個Son.java,但它不能正常工作,甚至用「-classpath」旗。但是,如果我將jar添加到編譯器項目的構建路徑中,它將起作用(並且不需要classpath標誌)。這是正常的行爲?

而這導致了另一個問題。當我嘗試在Tomcat服務器上運行的項目中使用這段代碼時,即使使用WEB-INF/lib中的jar,我也無法使其運行。

回答

2

您可以將JAR添加到您的類路徑,如下所示:

standardJavaFileManager.setLocation(
    StandardLocation.CLASS_PATH, 
    Arrays.asList(new File ("path/to/ParentProject.jar")) 
); 
+0

我來到了週末前的這個相同的解決方案,而我又嘗試它,我不知道爲什麼它是如此很難找到這個選項 – 2014-11-18 16:58:58