У меня есть задача скомпилировать исходный файл 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 предупреждений