JavaCompiler не работает в Jar - PullRequest
       31

JavaCompiler не работает в Jar

0 голосов
/ 12 марта 2012

Я получил java-программу, которая использует JavaCompiler для генерации новых файлов классов.

Я использую jdk 1.6 в eclipse, и это прекрасно работает.

Но когда я экспортирую это как файл jar и не хочу компилировать некоторые файлы .java, это дает мне нулевую ошибку (потому что в системе, используемой jre, нет компилятора?).Есть ли способ предоставить компилятор в JAR-файл?

File fRun = new File("someFile.java");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<String> options = Arrays.asList( new String[] { "-d", currentDir+"\\bin\\"} );
Iterable<? extends JavaFileObject> compUnits =  fileManager.getJavaFileObjects(fRun);
Boolean compRes = compiler.getTask(null, fileManager, null, options, null, compUnits).call();           

if(compRes == true){
    System.out.println("Compilation has succeeded");
    fileManager.close();
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    Class<?> compiledClass = cl.loadClass(someFile);
    cRun = compiledClass;
}else{
    System.out.println("Compilation error");
    fileManager.close();
    throw new Exception("Compilation Error");
}

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Это поможет вам -> http://weblogs.java.net/blog/kirillcool/archive/2005/05/using_java_comp.html Ищите «... Стандартный метод компиляции исходных файлов Java в обычном автономном приложении - использовать tools.jar, который находится в jdk / lib ...«

1 голос
/ 12 марта 2012

Вы должны найти источник реализации JavaCompiler (я полагаю, tools.jar из JDK), а затем вы можете включить это в путь к классам.Как показывает статья, на которую ссылается @Chuck в своем ответе, эта банка очень велика и может быть неприемлема для развертывания.Если это так, вы можете рассмотреть другие варианты, описанные в этой статье.

...