### Nullability Annotations Example Source: https://github.com/projectlombok/lombok/wiki/COMPLEXITIES:-Nullity-in-the-type-system Demonstrates a scenario where nullability annotations are applied. This example highlights potential linting issues without proper TYPE_USE support. ```java @NotNullByDefault class Example { @Nullable List getNames() { return List.of("a", null, "b"); // [1] } public void foo(String arg) {} public static void main(String[] args) { var ex = new Example(); var list = ex.getNames(); foo(list.get(1)); // [2] } } ``` -------------------------------- ### Legacy/Raw List Example Source: https://github.com/projectlombok/lombok/wiki/Language-Design:-Null-vs.-Optional Demonstrates the legacy/raw type `List` in Java. This type offers no compile-time safety for `get()` or `add()` operations, allowing any type to be added and retrieved, which can lead to runtime errors. ```java List list = new ArrayList(); list.add(Integer.valueOf(5)); // Allowed list.add(Double.valueOf(5.0)); // Allowed Object o = list.get(0); // Allowed, but type is unknown at compile time ``` -------------------------------- ### Example Usage of @SuperBuilder Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/experimental/SuperBuilder.html A concise example demonstrating the instantiation of a class using the builder pattern generated by @SuperBuilder. This shows how to set fields from both the current class and its superclasses. ```java Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build(); ``` -------------------------------- ### List Comprehension Syntax Example Source: https://github.com/projectlombok/lombok/blob/master/doc/PlannedExtensions.txt Demonstrates a proposed syntax for list comprehensions in Java, allowing for in-place list construction and filtering. This example shows creating a list of integer lengths from a list of strings, filtering out nulls. ```java List lengths = build; for ( String s : list ) toInt().filter(s != null).select(s.length()); ``` -------------------------------- ### Run Docker Container Interactively Source: https://github.com/projectlombok/lombok/blob/master/docker/gradle/readme.md Starts an interactive Docker container session. ```bash docker run -it lombok-gradle-jdk17 ``` -------------------------------- ### Run Docker Container Interactively Source: https://github.com/projectlombok/lombok/blob/master/docker/ant/readme.md Starts an interactive Docker container based on the `lombok-ant-jdk17` image. ```bash docker run -it lombok-ant-jdk17 ``` -------------------------------- ### Hierarchical Configuration Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/configuration.html Demonstrates how configuration settings closer to the source file take precedence. The `lombok.log.fieldName` is set to `foobar` globally and overridden to `xyzzy` for a specific project. ```properties lombok.log.fieldName = foobar ``` ```properties lombok.log.fieldName = xyzzy ``` -------------------------------- ### Run Docker Container with Mounted Lombok JAR Source: https://github.com/projectlombok/lombok/blob/master/docker/gradle/readme.md Starts a Docker container, mounting a local Lombok JAR into the container's classpath for use. ```bash docker run --rm -it -v //dist/lombok.jar:/workspace/classpath/lombok.jar lombok-gradle-jdk17 ``` -------------------------------- ### Conceptual NUI Subtyping Example Source: https://github.com/projectlombok/lombok/wiki/Language-Design:-Null-vs.-Optional A conceptual example demonstrating how NUI-allowed-ness could be represented in the type system, showing that a type that cannot be NUI is a subtype of a type that can be NUI. ```java String[But cannot ever be NUI] x = someExpr(); String[Can be NUI] n = x; ``` -------------------------------- ### Slf4j Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/log.html Generates a private static final org.slf4j.Logger field. ```java private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class); ``` -------------------------------- ### Log4j Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/log.html Generates a private static final org.apache.log4j.Logger field. ```java private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class); ``` -------------------------------- ### CommonsLog Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/log.html Generates a private static final org.apache.commons.logging.Log field. ```java private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class); ``` -------------------------------- ### Add Entry to List Configuration Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/configuration.html Use `+=` to add an entry to a configuration key that accepts lists. This example adds `m_` to the `lombok.accessors.prefix` list. ```properties lombok.accessors.prefix += m_ ``` -------------------------------- ### Basic @Data Usage Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/Data.html This example demonstrates the basic usage of the @Data annotation on a simple Java class. ```java import lombok.Data; @Data public class Person { private String name; private int age; } ``` -------------------------------- ### Static Import Limitation Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/experimental/UtilityClass.html Demonstrates the limitation where non-star static imports from @UtilityClass-annotated classes do not work. Use star imports or direct access instead. ```java // This will NOT compile due to non-star static import limitation: // import static com.example.MyUtility.utilityMethod; // Use star static import instead: import static com.example.MyUtility.*; public class ExampleUsage { public static void main(String[] args) { // If using star import: utilityMethod(); // Or direct access: // com.example.MyUtility.utilityMethod(); } } ``` -------------------------------- ### Customizing @SuperBuilder Options Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/experimental/SuperBuilder.html Illustrates how to customize the build method name, builder method name, toBuilder flag, and setter prefix. This example changes all these options from their defaults. ```java @SuperBuilder(buildMethodName = "execute", builderMethodName = "helloWorld", toBuilder = true, setterPrefix = "set") public class Person extends Named.NamedBuilder { String city; @java.lang.Override protected Person.PersonBuilder self() { return (Person.PersonBuilder) super.self(); } @java.lang.Override public Person.PersonBuilder toBuilder() { return (Person.PersonBuilder) super.toBuilder(); } @lombok.experimental.SuperBuilder public static class PersonBuilder extends Named.NamedBuilder { String city; @java.lang.Override protected Person.PersonBuilder self() { return this; } @java.lang.Override public Person build() { return new Person(this); } @java.lang.Override public Person.PersonBuilder toBuilder() { return new Person.PersonBuilder().self().read(this); } } } class Named> { String name; protected abstract B self(); public abstract static class NamedBuilder> { java.util.List jobs; protected abstract B self(); public abstract Named build(); public B job(String job) { if (this.jobs == null) { this.jobs = new java.util.ArrayList(); } this.jobs.add(job); return this.self(); } public B jobs(java.util.Collection jobs) { if (this.jobs == null) { this.jobs = new java.util.ArrayList(); } this.jobs.addAll(jobs); return this.self(); } public B clearJobs() { if (this.jobs != null) { this.jobs.clear(); } return this.self(); } protected Object read(Object object) { if (object instanceof Named) { Named other = (Named) object; if (other.name != null) { this.name(other.name); } if (other.jobs != null) { this.jobs(other.jobs); } } return this; } public abstract B toBuilder(); } protected Named(final NamedBuilder b) { if (b != null) { if (b.name != null) { this.name = b.name; } if (b.jobs != null) { this.jobs = new java.util.ArrayList(b.jobs); } } } public Named() { } public String getName() { return this.name; } public java.util.List getJobs() { return this.jobs; } } ``` -------------------------------- ### XSlf4j Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/log.html Generates a private static final org.slf4j.ext.XLogger field. ```java private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class); ``` -------------------------------- ### JBossLog Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/log.html Generates a private static final org.jboss.logging.Logger field. ```java private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class); ``` -------------------------------- ### Flogger Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/log.html Generates a private static final com.google.common.flogger.FluentLogger field. ```java private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass(); ``` -------------------------------- ### Log4j2 Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/log.html Generates a private static final org.apache.logging.log4j.Logger field. ```java private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class); ``` -------------------------------- ### Start New Feature Branch Source: https://github.com/projectlombok/lombok/blob/master/doc/git-workflow.txt Begin developing a new feature by checking out the 'develop' branch and creating a new, uniquely named branch for your work. ```git git checkout develop git checkout -b fixFoobar ``` -------------------------------- ### Run Docker Container with Mounted JAR Source: https://github.com/projectlombok/lombok/blob/master/docker/ant/readme.md Starts an interactive Docker container, mounting a local Lombok JAR into the container's workspace. This allows using a specific JAR version within the container. ```bash docker run --rm -it -v //dist/lombok.jar:/workspace/lombok.jar lombok-ant-jdk17 ``` -------------------------------- ### CustomLog Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/log.html Generates a private static final field for a custom logger. Requires configuration in lombok.config. ```java private static final _com.foo.your.Logger_ log = _com.foo.your.LoggerFactory.createYourLogger_(LogExample.class); ``` -------------------------------- ### Run Lombok Maven Docker Container Source: https://github.com/projectlombok/lombok/blob/master/docker/maven/readme.md Executes a Docker container for Lombok with Maven. The second example mounts the local lombok.jar into the container. ```bash docker run -it lombok-maven-jdk17 ``` ```bash docker run --rm -it -v //dist/lombok.jar:/workspace/lombok.jar lombok-maven-jdk17 ``` -------------------------------- ### Example of a fully resolved code snippet Source: https://github.com/projectlombok/lombok/wiki/LOMBOK-CONCEPT:-Resolution This shows the ideal interpretation of a code snippet, including package, class, inheritance, fields, and method return types. ```java com.foo is a package, Bar is a class inside that package (which is declared to extend AbstractList and implements Serializable), it has a public static field called baz, which is of type a.b.Quux and which has a method called quux(); it returns a java.lang.String. ``` -------------------------------- ### Example of Mandatory Fields with Builder Interfaces Source: https://github.com/projectlombok/lombok/wiki/FEATURE-IDEA:-"Mandatory"-fields-with-@Builder This pseudocode illustrates a builder pattern using a series of interfaces to enforce mandatory field setting. Each interface represents a step in the building process. ```java @Builder class Example { @Mandatory int a, b; String extra; } generates: public static ExampleBuilderStep1 builder() { return new ExampleBuilder(); } interface ExampleBuilderStep1 { ExampleBuilderStep2 a(int a); } interface ExampleBuilderStep2 { ExampleBuilder b(int b); } class ExampleBuilder implements ExampleBuilderStep1, ExampleBuilderStep2 { private int a, b; private String extra; public ExampleBuilderStep2 a(int a) { this.a = a; return this; } public ExampleBuilder b(int b) { this.b = b; return this; } public Example build() { ... } } ``` -------------------------------- ### @Data with staticConstructor Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/Data.html This example shows how to use the staticConstructor parameter with @Data to generate a static factory method for classes with generics. ```java import lombok.Data; @Data(staticConstructor="of") class Foo { private T x; } ``` -------------------------------- ### Example of a partially resolved code snippet Source: https://github.com/projectlombok/lombok/wiki/LOMBOK-CONCEPT:-Resolution This provides a less detailed interpretation, focusing on package, class, fields, and methods without type information. ```java com.foo is a package, Bar is a class in the package, baz is a static field in that, and quux is a method. ``` -------------------------------- ### Subtyping Relationship Example (Integer to Number) Source: https://github.com/projectlombok/lombok/wiki/Language-Design:-Null-vs.-Optional Illustrates a standard subtyping relationship in Java where a more specific type (Integer) is assignable to a more general type (Number). This serves as an analogy for NUI subtyping. ```java Integer x = someExpr(); Number n = x; ``` -------------------------------- ### Execute Ant Dist Command in Container Source: https://github.com/projectlombok/lombok/blob/master/docker/ant/readme.md Navigates to the 'classpath' directory within the container and executes the 'ant dist' command. This is typically done after starting a container interactively. ```bash cd classpath ant dist ``` -------------------------------- ### Example of an alternative, valid Java interpretation Source: https://github.com/projectlombok/lombok/wiki/LOMBOK-CONCEPT:-Resolution This demonstrates a valid, though unconventional, interpretation of a code snippet, highlighting how broken code conventions can lead to unexpected meanings. ```java com is a package, foo is a class in the com package, Bar is an inner static class of the com.foo class, baz is a static field in inner class com.foo.Bar, and quux is a static method in that. This interpretation implies various very common code standards were broken (mainly: lower-cased class name, accessing a static member via an expression instead of the type), but it's valid java. ``` -------------------------------- ### Clear Inherited Configuration Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/configuration.html Use `clear` to reset a configuration key to its default value, overriding settings from parent configuration files. This example disables warnings for `val` usage. ```properties clear lombok.val.flagUsage ``` -------------------------------- ### ObjectExtensions Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/experimental/ExtensionMethod.html Demonstrates how to define and use an extension method for null-safe value assignment. The extension method 'or' is added to any type T, allowing it to be called on potentially null objects. ```java public class ObjectExtensions { public static T or(T object, T ifNull) { return object != null ? object : ifNull; } } ``` -------------------------------- ### Java Map Interface - NUI Type Dimension get() Method Source: https://github.com/projectlombok/lombok/wiki/Language-Design:-Null-vs.-Optional An example of how the get() method might be updated to indicate NUI (nullability) safety using type dimensions, allowing for backwards compatible transitions. ```java // at some later point, after introducing NUI type dimension interface Map { public @NonNUI V get(Object key); } ``` -------------------------------- ### Import Configuration using Environment Variable Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/configuration.html Import configuration settings using environment variables for dynamic path resolution. Tilde (~) is also supported for user home directory. ```properties import /shared.config ``` ```properties import ~/my.config ``` -------------------------------- ### Covariant List Example Source: https://github.com/projectlombok/lombok/wiki/Language-Design:-Null-vs.-Optional Demonstrates a covariant generic type in Java using `List`. While `get()` operations are safe, `add()` operations are disallowed to maintain type safety. ```java List integers = new ArrayList(); List numbers = integers; // Covariance // numbers.add(Double.valueOf(5.0)); // Error: add() not allowed Integer i = integers.get(0); // Safe to get ``` -------------------------------- ### Import Configuration from Absolute Path (Windows) Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/configuration.html Import configuration settings from another file using an absolute path on Windows systems. ```properties import d:/lombok/model.config ``` -------------------------------- ### Import Configuration from Absolute Path (Linux) Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/configuration.html Import configuration settings from another file using an absolute path on Linux systems. ```properties import /etc/lombok/model.config ``` -------------------------------- ### Contravariant List Example Source: https://github.com/projectlombok/lombok/wiki/Language-Design:-Null-vs.-Optional Illustrates a contravariant generic type in Java using `List`. `add()` operations are permitted, but `get()` operations are restricted to `Object` to ensure type safety. ```java List objects = new ArrayList(); List numbers = objects; // Contravariance numbers.add(Integer.valueOf(5)); // Safe to add Object o = numbers.get(0); // Safe to get as Object ``` -------------------------------- ### Invariant List Example Source: https://github.com/projectlombok/lombok/wiki/Language-Design:-Null-vs.-Optional Shows an invariant generic type in Java using `List`. Both `get()` and `add()` operations are allowed, but the list can only hold `Number` types, preventing the introduction of subtypes like `Integer` or `Double` directly. ```java List numbers = new ArrayList(); // List integers = numbers; // Error: Invariance numbers.add(Integer.valueOf(5)); // Allowed Number n = numbers.get(0); // Safe to get ``` -------------------------------- ### Generate All Lombok Configuration Keys Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/configuration.html Run this command to generate a complete `lombok.config` file containing all supported configuration keys for your version of Lombok. This is useful for understanding available options. ```bash java -jar lombok.jar config -g --verbose ``` -------------------------------- ### Run Delombok from Command Line (Directory) Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/delombok.html Use this command to copy and transform an entire directory of Java sources. The output directory will be created if it doesn't exist. ```bash java -jar lombok.jar delombok src -d src-delomboked ``` -------------------------------- ### Java Code Snippet Demonstrating Map Nullity Check Source: https://github.com/projectlombok/lombok/wiki/COMPLEXITIES:-Nullity-in-the-type-system An example of checking for null return from a Map's `get` method when the map is expected to contain non-null values. This scenario can lead to linter errors with some annotation systems. ```Java Map map = ...; String value = map.get("foo"); if (value == null) throw new NoSuchElementException(); ``` -------------------------------- ### Java Map Interface - Original get() Method Source: https://github.com/projectlombok/lombok/wiki/Language-Design:-Null-vs.-Optional This is the original signature of the get() method in Java's Map interface before the introduction of Optional. ```java interface Map { public V get(Object o); } ``` -------------------------------- ### Import Configuration from JAR Archive Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/configuration.html Import configuration settings from a file within a JAR archive. Specify the path to the JAR and the file within it. ```properties import ../deps/lombok-config.jar ``` ```properties import ../deps/lombok-config.zip!base/model.config ``` -------------------------------- ### Import Configuration from Relative Path Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/configuration.html Import configuration settings from another file using a relative path. The location is resolved relative to the importing file. ```properties import ../configuration/model.config ``` -------------------------------- ### Java Map Interface - Hypothetical Optional get() Method Source: https://github.com/projectlombok/lombok/wiki/Language-Design:-Null-vs.-Optional A hypothetical signature for the get() method if Optional were to be adopted as the standard for handling 'not found' scenarios. ```java interface Map { public Optional get(Object o); } ``` -------------------------------- ### Java Map get Method Signature Source: https://github.com/projectlombok/lombok/wiki/COMPLEXITIES:-Nullity-in-the-type-system The signature of the standard `get` method in `java.util.Map`. This is used to illustrate issues with nullity inference when V is a type parameter. ```Java public V get(Object key); ``` -------------------------------- ### Generator Example: Returning Sequence Source: https://github.com/projectlombok/lombok/blob/master/doc/PlannedExtensions.txt Illustrates how a @Generator annotation could enable a method to return a sequence of values instead of just the first one. This example shows a method intended to return numbers from 0 to 9. ```java @Generator public int return0Through9() { for ( int i = 0 ; i < 10 ; i++ ) return i; } ``` -------------------------------- ### JDK 9+ with module-info.java Source: https://github.com/projectlombok/lombok/blob/master/website/templates/setup/javac.html Use this command when compiling Java 9+ projects that have a `module-info.java` file. Ensure Lombok is added as a static module requirement. ```bash javac -cp lombok.jar -p lombok.jar ... ``` ```java module _myapp_ { requires static lombok; } ``` -------------------------------- ### Run Delombok from Command Line (Single File) Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/delombok.html Use this command to print the transformation result of a single Java file directly to standard output. ```bash java -jar lombok.jar delombok -p MyJavaFile.java ``` -------------------------------- ### Build Docker Image with Bazel Source: https://github.com/projectlombok/lombok/blob/master/docker/bazel/readme.md Builds a Docker image using Bazel with a specified version. The default Bazel version is 2.0.0. ```bash docker build -t lombok-bazel-jdk17 -f bazel/Dockerfile . ``` -------------------------------- ### Compile with Maven inside Container Source: https://github.com/projectlombok/lombok/blob/master/docker/maven/readme.md Navigates to the classpath directory and compiles the project using Maven within the running container. ```bash cd classpath mvn compile ``` -------------------------------- ### Build Docker Image with Default Gradle Version Source: https://github.com/projectlombok/lombok/blob/master/docker/gradle/readme.md Builds the Docker image using the default specified Gradle version. ```bash docker build -t lombok-gradle-jdk17 -f gradle/Dockerfile . ``` -------------------------------- ### JUL (java.util.logging) Example Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/log.html Generates a private static final java.util.logging.Logger field. ```java private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName()); ``` -------------------------------- ### Applying @With to a Type Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/With.html Generates a `with` method for each non-static field in the class. Fields starting with '$' are skipped. ```java import lombok.With; @With public class Point { private final int x; private final int y; public Point(int x, int y) { this.x = x; this.y = y; } } ``` -------------------------------- ### JDK 9+ without modules Source: https://github.com/projectlombok/lombok/blob/master/website/templates/setup/javac.html For Java 9+ projects without a `module-info.java` file, use Lombok as you normally would by adding it to the classpath. ```bash javac -cp lombok.jar ... ``` -------------------------------- ### Add Lombok to Bootclasspath for Older Versions Source: https://github.com/projectlombok/lombok/blob/master/website/templates/setup/ecj.html Include this VM argument if you are using an older version of Lombok or Java. This ensures Lombok is available during the boot process. ```bash -Xbootclasspath/p:lombok.jar ``` -------------------------------- ### Build Docker Image with Default Ant Version Source: https://github.com/projectlombok/lombok/blob/master/docker/ant/readme.md Builds a Docker image using the default Ant version (1.10.9). Execute this command from the `/docker` directory. ```bash docker build -t lombok-ant-jdk17 -f ant/Dockerfile . ``` -------------------------------- ### Include specific fields with @ToString.Include Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/ToString.html Fields starting with '$' are excluded by default. Use @ToString.Include to explicitly include them in the generated toString() method. ```java import lombok.ToString; @ToString public class ToStringExample { private String name; private int age; private String $internalField; // ... constructors, getters, setters ... } ``` ```java import lombok.ToString; @ToString public class ToStringIncludeExample { private String name; private int age; @ToString.Include private String $internalField; // ... constructors, getters, setters ... } ``` -------------------------------- ### Enable Fluent Setters and Getters Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/configuration.html Set `lombok.accessors.fluent` to `true` to have generated setters and getters named after the field, without `get` or `set` prefixes. ```properties lombok.accessors.fluent = true ``` -------------------------------- ### Create Maven ECJ Bootstrap Agent Source: https://github.com/projectlombok/lombok/blob/master/website/templates/setup/ecj.html Run this command to generate the necessary files (`.mvn/jvm.config` and `.mvn/lombok-bootstrap.jar`) for integrating Lombok with ECJ in a Maven project. The path should point to your project root containing `pom.xml`. ```bash java -jar lombok.jar createMavenECJBootstrap -o _/path/to/project/root_ ``` -------------------------------- ### @Locked with a Custom Lock Field Source: https://github.com/projectlombok/lombok/blob/master/website/templates/features/Locked.html This example shows how to use @Locked with a pre-defined ReentrantLock field. This allows for explicit control over the lock object. ```java import java.util.concurrent.locks.ReentrantLock; import lombok.Locked; public class LockedCustomLockField { private final ReentrantLock myCustomLock = new ReentrantLock(); @Locked("myCustomLock") public void myLockedMethod() { // Code that needs to be locked using myCustomLock System.out.println("Executing locked method with custom lock..."); } } ``` -------------------------------- ### JDK 1.6 - 1.8 or no modules Source: https://github.com/projectlombok/lombok/blob/master/website/templates/setup/javac.html Use this command for compiling Java versions 1.6 through 1.8, or for later JDK versions if your project is not modularized. Simply add Lombok to the classpath. ```bash javac -cp lombok.jar .... ```