2011-05-03 6 views
1

compilationTask의 소스 파일을 설정하는 방법을 모르겠습니다. CompilationTask로 컴파일 소스를 설정하는 방법

나는이 시도 :

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

List<String> optionList = new ArrayList<String>(Arrays.asList("-d","build/classes")); 

List<String> classes = new ArrayList<String>(); 
classes.add("src/Hello.java"); 
CompilationTask task = compiler.getTask(null, null, null, optionList, classes, null); 

task.call(); 

을하지만 다음과 같은 오류 얻을 : 나는 클래스의 널 대신 넣으면 나는 "어떤 소스 파일"아니오 소스 파일로 얻을 물론

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: src/Hello.java

을 주어졌다. 이 전에 JavaCompiler 실행 함수를 사용하여 시도했지만 문자열 인수 옵션을 지정할 수 없습니다 (또는 어떻게) 몰라. 변경 시도

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>(); 
StandardJavaFileManager fm = compiler.getStandardFileManager(diagnostics, null, null); 

ArrayList<String> optionList = new ArrayList<String>(Arrays.asList("-d","build/classes")); 

ArrayList<File> files = new ArrayList<File>(); 
files.add(new File("src/Hello.java")); 
CompilationTask task = compiler.getTask(null, null, null, optionList, null, fm.getJavaFileObjectsFromFiles(files)); 

task.call(); 
+0

혹시이 문제를 해결 했습니까? 그렇다면 솔루션을 게시 하시겠습니까? –

+0

포스트가 솔루션 – Muaz

답변

0

: 여기

는 솔루션입니다

classes.add("src/Hello.java"); 

에 :

classes.add(
    new SimpleJavaFileObject(new URI("src/Hello.java"), JavaFileObject.Kind.SOURCE) 
); 

다소 장황하지만 업무는 수행합니다. 물론 그것은 방법으로 추출 될 수 있습니다.

+0

으로 업데이트되었습니다. 컴파일 단위가 필요합니다. JavaFileObjects 목록이 필요하며 JavaFileObject는 인터페이스입니다 (모든 메소드를 구현해야 함). 소스 파일의 경로를 문자열이나 다른 것으로 지정하는 또 다른 방법이 있습니까? – Muaz

0

: 내 컴퓨터에서 코드를 실행했을 때 내가 경로 절대 이루어 불구하고, 다음 코드는 문제를 해결해야

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

     StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); 
     List<String> optionList = new ArrayList<String>(Arrays.asList("-d","build/classes")); 

Iterable<? extends JavaFileObject> classes = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(new File("src/Hello.java"))); 


CompilationTask task = compiler.getTask(null, null, null, optionList,null, classes); 

task.call(); 
관련 문제