lombok

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: lombok for comprehensive documentation.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "lombok" with this command: npx skills add claude-dev-suite/claude-dev-suite/claude-dev-suite-claude-dev-suite-lombok

Project Lombok

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: lombok for comprehensive documentation.

Maven Configuration

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.34</version> <optional>true</optional> </dependency>

<!-- For MapStruct compatibility --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>0.2.0</version> </dependency>

Common Annotations

@Data (All-in-One)

@Data public class User { private Long id; private String name; private String email; }

// Generates: // - @Getter for all fields // - @Setter for all non-final fields // - @ToString // - @EqualsAndHashCode // - @RequiredArgsConstructor

@Getter / @Setter

public class User { @Getter @Setter private String name;

@Getter // Read-only
private final String email;

@Setter(AccessLevel.PROTECTED)
private String internalId;

}

@NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor

@NoArgsConstructor @AllArgsConstructor public class User { private Long id; private String name; }

@RequiredArgsConstructor public class UserService { private final UserRepository userRepository; // Included in constructor private final UserMapper userMapper; // Included in constructor private String cacheName; // NOT included }

@Builder

@Data @Builder public class User { private Long id; private String name; private String email; @Builder.Default private UserStatus status = UserStatus.ACTIVE; }

// Usage User user = User.builder() .name("John") .email("john@example.com") .build();

// With toBuilder for updates User updated = user.toBuilder() .name("Jane") .build();

@Value (Immutable)

@Value public class UserResponse { Long id; String name; String email; LocalDateTime createdAt; }

// Generates: // - All fields are private final // - @AllArgsConstructor // - @Getter (no setters) // - @ToString // - @EqualsAndHashCode

Entity Pattern

@Entity @Table(name = "users") @Data @NoArgsConstructor @AllArgsConstructor @Builder @EntityListeners(AuditingEntityListener.class) public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false)
private String name;

@Column(unique = true, nullable = false)
private String email;

@Enumerated(EnumType.STRING)
@Builder.Default
private UserStatus status = UserStatus.ACTIVE;

@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;

@LastModifiedDate
private LocalDateTime updatedAt;

// Exclude from toString/equals for performance
@ToString.Exclude
@EqualsAndHashCode.Exclude
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "department_id")
private Department department;

}

Service Pattern with Constructor Injection

@Service @RequiredArgsConstructor @Slf4j public class UserServiceImpl implements UserService {

private final UserRepository userRepository;
private final UserMapper userMapper;
private final PasswordEncoder passwordEncoder;

@Override
public UserResponse create(CreateUserRequest dto) {
    log.info("Creating user: {}", dto.getEmail());
    User user = userMapper.toEntity(dto);
    return userMapper.toResponse(userRepository.save(user));
}

}

Logging

@Slf4j // SLF4J logger public class UserService { public void process() { log.info("Processing..."); log.debug("Debug info: {}", data); log.error("Error occurred", exception); } }

@Log4j2 // Log4j2 logger @CommonsLog // Apache Commons Logging @JBossLog // JBoss Logging

DTO Pattern

// Request DTO @Data public class CreateUserRequest { @NotBlank private String name; @Email private String email; @Size(min = 8) private String password; }

// Response DTO (immutable) @Value @Builder public class UserResponse { Long id; String name; String email; UserStatus status; LocalDateTime createdAt; }

@Cleanup

public void readFile(String path) throws IOException { @Cleanup InputStream in = new FileInputStream(path); // in.close() called automatically }

@SneakyThrows

@SneakyThrows // Wraps checked exception public String readConfig() { return Files.readString(Path.of("config.json")); }

@Synchronized

public class Counter { @Synchronized public void increment() { // Thread-safe } }

@With (Immutable Updates)

@Value @With public class Point { int x; int y; }

Point p1 = new Point(1, 2); Point p2 = p1.withX(5); // Point(5, 2)

Key Annotations

Annotation Purpose

@Data

Getter, Setter, ToString, Equals, Constructor

@Value

Immutable class

@Builder

Builder pattern

@RequiredArgsConstructor

Constructor for final fields

@Slf4j

Logger field

@ToString.Exclude

Exclude from toString

@EqualsAndHashCode.Exclude

Exclude from equals/hashCode

When NOT to Use This Skill

Scenario Use Instead

Java core language java skill

MapStruct mapping mapstruct skill

Spring annotations backend-spring-boot skill

JPA entities complex logic Manual implementation

Public API design Explicit methods for clarity

Anti-Patterns

Anti-Pattern Why It's Bad Correct Approach

@Data on JPA entities toString/equals issues Use @Getter/@Setter selectively

Not excluding lazy relations LazyInitializationException Use @ToString.Exclude

@EqualsAndHashCode on entities Proxy issues Use @EqualsAndHashCode(onlyExplicitlyIncluded = true)

@SneakyThrows everywhere Hides exceptions Use proper exception handling

@Builder without @Default Null fields Add @Builder.Default

@Value with mutable fields Breaks immutability Use only immutable types

Mixing @Data and manual methods Confusing API Be consistent

Not configuring in lombok.config Inconsistent behavior Use lombok.config file

Quick Troubleshooting

Issue Cause Solution

"Cannot find symbol" for getters IDE not processing Enable annotation processing

LazyInitializationException toString on lazy relation Add @ToString.Exclude

MapStruct not working Wrong processor order Lombok before MapStruct

Builder missing fields No @Builder.Default Add defaults or check config

StackOverflowError in equals Circular reference Exclude relation fields

IDE shows errors but compiles IDE cache Invalidate caches/restart

@Slf4j logger not found SLF4J not in classpath Add SLF4J dependency

Generated code not visible delombok needed Run delombok task

Reference Documentation

  • Lombok Documentation

  • Stable Features

  • Configuration

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: lombok for comprehensive documentation.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

cron-scheduling

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

token-optimization

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

webrtc

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

react-19

No summary provided by upstream source.

Repository SourceNeeds Review