java - 合并后与Lombok发生Gradle编译错误

标签 java gradle lombok

切换分支后,编译在我的构建过程中失败。这里是一个片段:

    $ ./gradlew clean build
Starting a Gradle Daemon, 1 stopped Daemon could not be reused, use --status for details

    > Task :compileJava
    C:\Users\xxx\Documents\Repositories\Homepage\Home\src\main\java\com\xxx\project\bootstrap\DatabaseLoader.java:19: error: cannot find symbol
    import static com.xxx.homepage.bootstrap.DataSetupUtil.getUserObject;
    ^
      symbol:   static getUserObject
      location: class DataSetupUtil
    C:\Users\xxx\Documents\Repositories\Homepage\Home\src\main\java\com\xxx\project\bootstrap\DataSetupUtil.java:17: error: cannot find symbol
            user.setEmail(email);
                ^
      symbol:   method setEmail(@lombok.NonNull String)
      location: variable user of type User
    C:\Users\xxx\Documents\Repositories\Homepage\Home\src\main\java\com\xxx\project\bootstrap\DataSetupUtil.java:18: error: cannot find symbol
            user.setUsername(username);
                ^
      symbol:   method setUsername(@lombok.NonNull String)
      location: variable user of type User
    C:\Users\xxx\Documents\Repositories\Homepage\Home\src\main\java\com\xxx\project\bootstrap\DataSetupUtil.java:19: error: cannot find symbol
            user.setName(name);
                ^
      symbol:   method setName(@lombok.NonNull String)
      location: variable user of type User
    C:\Users\xxx\Documents\Repositories\Homepage\Home\src\main\java\com\xxx\project\bootstrap\DataSetupUtil.java:20: error: cannot find symbol
            user.setFirstname(firstname);

这是我的build.gradle的样子:
plugins {
    id 'org.springframework.boot' version '2.2.5.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.xxx'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    repositories {
        maven {
            url "${nexusUrl}/content/groups/public/"
            credentials {
                username "$nexusUsername"
                password "$nexusPassword"
            }
        }
    }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'

    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
    compile group: 'com.google.guava', name: 'guava', version: '28.2-jre'

    compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity5', version: '3.0.4.RELEASE'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
}

这很奇怪,因为在切换分支之前和合并之前,一切都很好。有谁知道这个编译问题的原因是什么?此处的Gradle版本为6.2.2`输入代码。我也尝试删除C:\ Users \ user.gradle \ caches \ 6.2.2下的缓存
但这也没有帮助。

这里是无法识别的类:
import lombok.*;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import javax.persistence.*;
import javax.validation.constraints.Size;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;

@Entity
@Data
@NoArgsConstructor
@RequiredArgsConstructor
public class User implements UserDetails {

    @Id
    @GeneratedValue
    private Long id;

    @Version
    private Integer version;

    @NonNull
    @Size(min = 8, max = 20)
    @Column(nullable = false, unique = true, name="USERNAME")
    private String username;

    @NonNull
    @Size(min = 8, max = 30)
    @Column(nullable = false, unique = true, name="EMAIL")
    private String email;

    @NonNull
    @Column(length = 100, name = "PASSWORD")
    private String password;

    @NonNull
    @Column(nullable = false, name="ENABLED")
    private boolean enabled;

    @Size(min = 3, max = 20)
    @Column(name="NAME")
    private String name;

    @Size(min = 3, max = 20)
    @Column(name="FIRST_NAME")
    private String firstname;

    @Column(name="DATE_OF_BIRTH")
    private Date dateOfBirth;

    @Size(min = 3, max = 20)
    @Column(name="CITY")
    private String city;

    @Size(min = 3, max = 30)
    @Column(name = "COUNTRY")
    private String country;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(
            name = "users_roles",
            joinColumns = @JoinColumn(name = "user_id",referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "role_id",referencedColumnName = "id")
    )
    private Set<Role> roles = new HashSet<>();

    public void addRole(Role role) {
        roles.add(role);
    }

    public void addRoles(Set<Role> roles) {
        roles.forEach(this::addRole);
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        //map roles to GrantedAuthorities:
        return roles.stream().map(role -> new SimpleGrantedAuthority(role.getName())).collect(Collectors.toList());
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }
}

和实用程序类:
import com.rajic.homepage.domain.Role;
import com.rajic.homepage.domain.User;
import lombok.NonNull;
import lombok.experimental.UtilityClass;

import java.util.Date;

@UtilityClass
public class DataSetupUtil {

    public User getUserObject(@NonNull String email, @NonNull String username,
                              @NonNull String password, @NonNull String name, @NonNull String firstname,
                              @NonNull String city, @NonNull String country, @NonNull Date dateOfBirth, Role...roles) {
        User user = new User();
        user.setEmail(email);
        user.setUsername(username);
        user.setName(name);
        user.setFirstname(firstname);
        user.setPassword(password);
        user.setCity(city);
        user.setCountry(country);
        user.setDateOfBirth(dateOfBirth);
        user.setEnabled(true);
        for (int i = 0; i < roles.length; i++) {
            user.addRole(roles[i]);
        }
        return user;
    }
}

最佳答案

静态导入单个成员(“非星型”)通常会在导入经过龙目处理的类时引起问题。

解决方法是使用静态导入的星号(*)形式:

import static com.xxx.homepage.bootstrap.DataSetupUtil.*;

lombok documentation for @UtilityClass 在小字体中也提到了这一点:

Due to a peculiar way javac processes static imports, trying to do a non-star static import of any of the members of a @UtilityClass won't work. Either use a star static import: import static TypeMarkedWithUtilityClass.*; or don't statically import any of the members.

关于java - 合并后与Lombok发生Gradle编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60798253/

相关文章:

java - 在编程竞赛中获取输入时,我该如何阻止扫描仪读取输入?

java - Selenium 动态生长表

java - 在依赖于 Android 插件的自定义 Gradle 插件的单元测试中模拟应用程序变体

java - Lombok导致 "Actual and formal arguments lists differ in length error"

java - 如何使用 equals hashcode 和 toString 与两个有循环的对象进行 Lombok 操作?

java - 当定义的对象已存在于 map 中时,从我的 map 获取 null 返回值?

gradle - 跳过gradle中的任务,但仅当任务存在时

gradle - 在多模块项目中,Gradle 可以将插件构建为一个模块,然后在同一个构建中使用该插件吗?

java - 无法使用 Parse 运行应用程序

java - Sonar + Lombok @Data批注上的误报