Java Poet
JavaPoet is the successor to JavaWriter.
New projects should prefer JavaPoet because it has a stronger code model: it understands types and can manage imports automatically.
JavaPoet is also better suited to composition: rather than streaming the contents of a .java
file top-to-bottom in a single pass,
a file can be assembled as a tree of declarations.
Hello World
- Import jar
<dependency>
<groupId>com.squareup</groupId>
<artifactId>javapoet</artifactId>
<version>1.9.0</version>
</dependency>
- HelloWorld.java
package com.ryo.generator.java;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;
import javax.lang.model.element.Modifier;
import java.io.IOException;
/**
* Java poet demo
* Created by bbhou on 2017/9/29.
*/
public class HelloWorld {
public static void main(String[] args) throws IOException {
MethodSpec main = MethodSpec.methodBuilder("main")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(void.class)
.addParameter(String[].class, "args")
.addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!")
.build();
TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addMethod(main)
.build();
JavaFile javaFile = JavaFile.builder("com.example.helloworld", helloWorld)
.build();
javaFile.writeTo(System.out);
}
}
result:
package com.example.helloworld;
import java.lang.String;
import java.lang.System;
public final class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, JavaPoet!");
}
}