Процессор аннотаций не работает с API компилятора - Java - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть задача скомпилировать исходный файл Java из исходного кода.Поэтому я использовал JavaCompiler API.Мой java-класс аннотирован аннотацией Lombok @Data.Но когда я скомпилировал исключения класса, выдается.

Name.java

package com.pojo;

import java.lang.String;
import lombok.Data;

@Data
public class Name {
  private String last;

  private String first;
}

вот мой код, который компилирует Name.java

String fileToCompile = "/com/pojo/Name.java";

        File file = new File(fileToCompile);

        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
        fileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(new File("/home/")));

        Iterable<? extends JavaFileObject> jf = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(file));

        List<String> options = new ArrayList<>();
        options.add("-processor");
        options.add("lombok.launch.AnnotationProcessorHider$AnnotationProcessor");


        // Compile the file
        compiler.getTask(null,
                fileManager,
                null,
                options,
                null,
                jf)
        .call();

        fileManager.close();

Исключение:

предупреждение: невозможно инициализировать процессор javac из-за (наиболее вероятной) проблемы с загрузчиком классов: java.lang.NoClassDefFoundError: com / sun / tools / javac / processing / JavacProcessingEnvironment открытый класс Name {^ at lombok.javac.apt.LombokProcessor.getJavacProcessingEnvironment (LombokProcessor.java:423) в lombok.javac.apt.LombokProcessor.init (LombokProcessor.java:90)
в lombok.) в lombok.core.AnnotationProcessor.init (AnnotationProcessor.java:177) в lombok.launch.AnnotationProcessorHider $ AnnotationProcessor.init (AnnotationProcessor.java:73) в com.sun.tools.javac.processing.JavacEprocessing.JavacE.java: 500) на com.sun.tools.javac.processing.JavacProcessingEnvironment $ DiscoveredProcessors $ ProcessorStateIterator.next (JavacProcessingEnvironment.java:597) по адресу com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs (JavacProcessingEnvironment.java:690) по адресу com.sun.tools.javac.processing.jac: 91) at com.sun.tools.javac.processing.JavacProcessingEnvironmentsun.tools.javac.main.JavaCompiler.processAnnotations (JavaCompiler.java:1170) в com.sun.tools.javac.main.JavaCompiler.compile (JavaCompiler.java:856)
в com.sun.tools.javac.main.Main.compile (Main.java:523) в com.sun.tools.javac.api.JavacTaskImpl.doCall (JavacTaskImpl.java:129)
в com.sun.tools.javac.api.JavacTaskImpl.вызов (JavacTaskImpl.java:138) в com.pojo.CompilerTest.main (CompilerTest.java:55), вызванный: java.lang.ClassNotFoundException: com.sun.tools.javac.processing.JavacProcessingEnvironment в java.lang.ClassLoader.findClass (ClassLoader.java:530) в java.lang.ClassLoader.loadClass (ClassLoader.java:424) в lombok.launch.ShadowClassLoader.loadClass (ShadowClassLoader.java5: java5: java5: java5.ClassLoader.loadClass (ClassLoader.java:357) ... еще 17 предупреждений

...