or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

builder.mdconstructors.mddata-classes.mdexperimental.mdindex.mdlogging.mdproperty-access.mdutilities.md
tile.json

tessl/maven-org-projectlombok--lombok

A Java library that automatically plugs into your editor and build tools, reducing boilerplate code through annotations

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.projectlombok/lombok@1.18.x

To install, run

npx @tessl/cli install tessl/maven-org-projectlombok--lombok@1.18.0

index.mddocs/

Project Lombok

Project Lombok is a Java library that automatically plugs into your editor and build tools, reducing boilerplate code through compile-time annotation processing. It eliminates the need to write repetitive code like getters, setters, constructors, equals, hashCode, and toString methods by generating them automatically at compile time through annotations.

Package Information

  • Package Name: lombok
  • Package Type: Maven
  • Language: Java
  • Maven Coordinates: org.projectlombok:lombok
  • Installation: Add to your Maven pom.xml or Gradle build.gradle

Maven:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.38</version>
    <scope>provided</scope>
</dependency>

Gradle:

dependencies {
    compileOnly 'org.projectlombok:lombok:1.18.38'
    annotationProcessor 'org.projectlombok:lombok:1.18.38'
}

Core Imports

import lombok.*;
import lombok.experimental.*;
import lombok.extern.slf4j.Slf4j;

Individual imports:

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.Builder;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;

Basic Usage

import lombok.Data;
import lombok.NonNull;

@Data
public class Person {
    @NonNull
    private String name;
    private int age;
    private String email;
}

// Usage
Person person = new Person("John Doe", 30, "john@example.com");
System.out.println(person.getName());  // Generated getter
person.setAge(31);                     // Generated setter
System.out.println(person.toString()); // Generated toString

Architecture

Lombok operates through several key mechanisms:

  • Annotation Processing: Compile-time code generation using Java's annotation processing API
  • Bytecode Manipulation: Direct bytecode modification during compilation
  • IDE Integration: Plugin-based integration with major IDEs (Eclipse, IntelliJ IDEA, NetBeans)
  • Build Tool Support: Integration with Maven, Gradle, and Ant build systems
  • Delombok: Utility to convert lombok-annotated code to standard Java code for source inspection

Capabilities

Data Class Annotations

Comprehensive annotations for creating data classes with minimal boilerplate. Perfect for POJOs, DTOs, and value objects.

@Target(ElementType.TYPE)
@interface Data {
    String staticConstructor() default "";
}

@Target(ElementType.TYPE)
@interface Value {
    String staticConstructor() default "";
}

Data Class Annotations

Constructor Generation

Automatic constructor generation with various configurations for different use cases including dependency injection and immutable objects.

@Target(ElementType.TYPE)
@interface NoArgsConstructor {
    String staticName() default "";
    AccessLevel access() default AccessLevel.PUBLIC;
    boolean force() default false;
    AnyAnnotation[] onConstructor() default {};
}

@Target(ElementType.TYPE)
@interface AllArgsConstructor {
    String staticName() default "";
    AccessLevel access() default AccessLevel.PUBLIC;
    AnyAnnotation[] onConstructor() default {};
}

@Target(ElementType.TYPE)
@interface RequiredArgsConstructor {
    String staticName() default "";
    AccessLevel access() default AccessLevel.PUBLIC;
    AnyAnnotation[] onConstructor() default {};
}

Constructor Generation

Property Access Generation

Getter and setter generation with access level control, lazy loading, and method annotation support.

@Target({ElementType.FIELD, ElementType.TYPE})
@interface Getter {
    AccessLevel value() default AccessLevel.PUBLIC;
    AnyAnnotation[] onMethod() default {};
    boolean lazy() default false;
}

@Target({ElementType.FIELD, ElementType.TYPE})
@interface Setter {
    AccessLevel value() default AccessLevel.PUBLIC;
    AnyAnnotation[] onMethod() default {};
    AnyAnnotation[] onParam() default {};
}

Property Access

Builder Pattern

Fluent builder pattern implementation with support for inheritance, default values, and collection handling.

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR})
@interface Builder {
    String builderMethodName() default "builder";
    String buildMethodName() default "build";
    String builderClassName() default "";
    boolean toBuilder() default false;
    AccessLevel access() default AccessLevel.PUBLIC;
    String setterPrefix() default "";
}

@Target(ElementType.FIELD)
@interface Singular {
    String value() default "";
    boolean ignoreNullCollections() default false;
}

Builder Pattern

Utility Annotations

Code generation for common Java patterns including null checking, exception handling, synchronization, and immutable updates.

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE, ElementType.TYPE_USE})
@interface NonNull {}

@Target(ElementType.METHOD)
@interface SneakyThrows {
    Class<? extends Throwable>[] value() default {};
}

@Target(ElementType.METHOD)
@interface Synchronized {
    String value() default "";
}

@Target({ElementType.FIELD, ElementType.TYPE})
@interface With {
    AccessLevel value() default AccessLevel.PUBLIC;
    AnyAnnotation[] onMethod() default {};
    AnyAnnotation[] onParam() default {};
}

Utility Annotations

Logging Framework Integration

Automatic logger field generation for major Java logging frameworks with configurable topics and field names.

@Target(ElementType.TYPE)
@interface Slf4j {
    String topic() default "";
}

@Target(ElementType.TYPE)
@interface Log {
    String topic() default "";
}

@Target(ElementType.TYPE)
@interface Log4j2 {
    String topic() default "";
}

Logging Integration

Experimental Features

Advanced and experimental features including utility classes, enhanced builders for inheritance, and field name constants.

@Target(ElementType.TYPE)
@interface UtilityClass {}

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR})
@interface SuperBuilder {
    String builderMethodName() default "builder";
    String buildMethodName() default "build";
    boolean toBuilder() default false;
    String setterPrefix() default "";
}

@Target({ElementType.TYPE, ElementType.FIELD})
@interface FieldDefaults {
    AccessLevel level() default AccessLevel.NONE;
    boolean makeFinal() default false;
}

Experimental Features

Types

Core Enums

public enum AccessLevel {
    PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE, NONE
}

Type Inference

// Type inference for local variables
lombok.val finalVar = someExpression();  // final var with inferred type
lombok.var mutableVar = someExpression(); // mutable var with inferred type

Utility Classes

public final class Lombok {
    public static RuntimeException sneakyThrow(Throwable t);
    public static <T> T preventNullAnalysis(T value);
    public static <T> T checkNotNull(T reference, String errorMessage);
}