0

I have a task to compile java source file from source code. So I used JavaCompiler API. My java class annotated with Lombok annotation @Data. But when I compiled class exceptions are thrown.

Name.java

package com.pojo;

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

@Data
public class Name {
  private String last;

  private String first;
}

here is my code that's compile 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();

Exception:

warning: Can't initialize javac processor due to (most likely) a class loader problem: java.lang.NoClassDefFoundError: com/sun/tools/javac/processing/JavacProcessingEnvironment public class Name { ^ at lombok.javac.apt.LombokProcessor.getJavacProcessingEnvironment(LombokProcessor.java:423) at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:90)
at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:124) at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:177) at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:73) at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.(JavacProcessingEnvironment.java:500) at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:597) at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:690) at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91) at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035) at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176) at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170) at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
at com.sun.tools.javac.main.Main.compile(Main.java:523) at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138) at com.pojo.CompilerTest.main(CompilerTest.java:55) Caused by: java.lang.ClassNotFoundException: com.sun.tools.javac.processing.JavacProcessingEnvironment at java.lang.ClassLoader.findClass(ClassLoader.java:530) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at lombok.launch.ShadowClassLoader.loadClass(ShadowClassLoader.java:530) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 17 more 1 warning

8
  • Are you running this with the JDK or JRE? Commented Sep 24, 2018 at 12:28
  • I added tools.jar in JRE Commented Sep 24, 2018 at 12:29
  • Ok if tools.jar is on the classpath that should work, but maybe try with the JDK Commented Sep 24, 2018 at 12:30
  • how to try with JDK? Commented Sep 24, 2018 at 12:31
  • What JRE/JDK version are you using? Commented Sep 24, 2018 at 12:48

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.