Reputation: 135
I have a problem with Lombok and JUnit.
I am using IntelliJ Idea
, the latest one, with Lombok
plugin installed and annotation processing enabled.
I have an entity class:
@Data
@Builder
@AllArgsConstructor
public class User {
private String name;
private String email;
}
build.gradle:
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.projectlombok', name: 'lombok', version: '1.18.10'
testCompile group: 'org.projectlombok', name: 'lombok', version: '1.16.10'
testAnnotationProcessor "org.projectlombok:lombok:1.18.10"
}
And finally, the test case:
@Test
public void whenCheckIfPresent_thenOk() {
User user = User.builder().name("John").email("[email protected]").build();
Optional<User> opt = Optional.ofNullable(user);
assertTrue(opt.isPresent());
assertEquals(user.getEmail(), opt.get().getEmail());
}
When I am trying to run this test I get below error:
IdeaProjects\Tutoriale\src\test\java\optionals\OptionalsTest.java:26: error: cannot find symbol
User user = User.builder().name("John").email("[email protected]").build();
^
symbol: method builder()
location: class User
IdeaProjects\Tutoriale\src\test\java\optionals\OptionalsTest.java:30: error: cannot find symbol
assertEquals(user.getEmail(), opt.get().getEmail());
^
symbol: method getEmail()
location: variable user of type User
IdeaProjects\Tutoriale\src\test\java\optionals\OptionalsTest.java:30: error: cannot find symbol
assertEquals(user.getEmail(), opt.get().getEmail());
^
symbol: method getEmail()
location: class User
It seems that annotation processing isn't working, but I have no idea how to fix this.
Upvotes: 12
Views: 14674
Reputation: 262
In my case, it was a problem with a setting in Idea. A project sub-module ended up with a really strange setting in Build, Execution, Deployment -> Compiler -> Annotation Processors
. Changing the sub-module option to Obtain processors from project classpath
fixed the issue.
Upvotes: 0
Reputation: 1
Replacing
compile group: 'org.projectlombok', name: 'lombok', version: "${lombok_version}"
with
compileClasspath group: 'org.projectlombok', name: 'lombok', version: "${lombok_version}"
worked for me!
Upvotes: 0
Reputation: 7543
You've used incorrect dependency testAnnotationProcessor
it should be annotationProcessor
, see lombock-gradle doc. After fixing gradle file you'll be able to build it with terminal.
Also it could be still failed in IDE because of lombok requires to enable annotation processing for IDE (check your IDE documentation).
Upvotes: 3
Reputation: 739
What Gradle version are you using? This issue was seen in Gradle version 5.4.1.
For Lombok annotations in test source sets, you need to add Lombok to two dependency configurations:
testCompileOnly '...' testAnnotationProcessor '...'
In the same way, as compileOnly and annotationProcessor, the first one makes the annotations available to the code and the second one activates annotation processing during compilation
You could try the dependency as below,
compileOnly 'org.projectlombok:lombok:1.18.8'
annotationProcessor 'org.projectlombok:lombok:1.18.8'
Reference: https://projectlombok.org/setup/gradleLombok doc
More information can be found in the below location,
https://github.com/rzwitserloot/lombok/issues/1945
Upvotes: 18