Java 合并后lombok的Gradle编译错误
切换分支后,编译在生成期间失败。这里有一个片段:Java 合并后lombok的Gradle编译错误,java,gradle,lombok,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\proj
$ ./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);
以下是my 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 lombok.*;
导入org.springframework.security.core.GrantedAuthority;
导入org.springframework.security.core.authority.SimpleGrantedAuthority;
导入org.springframework.security.core.userdetails.userdetails;
导入javax.persistence.*;
导入javax.validation.constraints.Size;
导入java.util.Collection;
导入java.util.Date;
导入java.util.HashSet;
导入java.util.Set;
导入java.util.stream.collector;
@实体
@资料
@诺尔格构装师
@所需参数构造函数
公共类用户实现UserDetails{
@身份证
@生成值
私人长id;
@版本
私有整数版本;
@非空
@尺寸(最小值为8,最大值为20)
@列(nullable=false,unique=true,name=“USERNAME”)
私有字符串用户名;
@非空
@尺寸(最小值为8,最大值为30)
@列(nullable=false,unique=true,name=“EMAIL”)
私人字符串电子邮件;
@非空
@列(长度=100,名称=“密码”)
私有字符串密码;
@非空
@列(nullable=false,name=“ENABLED”)
启用私有布尔值;
@尺寸(最小值=3,最大值=20)
@列(name=“name”)
私有字符串名称;
@尺寸(最小值=3,最大值=20)
@列(name=“FIRST_name”)
私有字符串名;
@列(name=“出生日期”)
私人出生日期;
@尺寸(最小值=3,最大值=20)
@列(name=“CITY”)
私人城市;
@尺寸(最小值=3,最大值=30)
@列(name=“COUNTRY”)
私人国家;
@ManyToMany(fetch=FetchType.EAGER)
@可接合(
name=“用户\角色”,
joinColumns=@JoinColumn(name=“user\u id”,referencedColumnName=“id”),
inverseJoinColumns=@JoinColumn(name=“role\u id”,referencedColumnName=“id”)
)
私有集角色=新HashSet();
public void addRole(角色角色){
角色。添加(角色);
}
公共无效添加角色(设置角色){
roles.forEach(this::addRole);
}
@凌驾
公共集合单个成员的静态导入(“非星型”)在导入lombok处理的类时经常会导致问题
解决方法是使用静态导入的星形(*)形式:
import static com.xxx.homepage.bootstrap.DataSetupUtil.*;
在小字体中也提到了这一点:
由于javac处理静态导入的特殊方式,尝试对@UtilityClass
的任何成员执行非星型静态导入将不起作用。请使用星型静态导入:导入标记为UtilityClass.*;
的静态类型,或者不静态导入任何成员
我怀疑这是一个gradle问题。你是静态导入Lombok生成的方法吗?这在很多情况下都不起作用。试试静态*导入。嗯……但它一直都在起作用。现在它在不改变这些类的情况下不起作用。实用类的意义是静态使用它,还是我错了?我只是添加了这些类o问题。但我认为实际上这些类还可以。你现在升级了gradle吗?我尝试了几个版本,直到6.2.2。都失败了。你可以静态导入@UtilityClass
,但你必须使用星形表单:导入static com.xxx.homepage.bootstrap.DataSetupUtil.
import static com.xxx.homepage.bootstrap.DataSetupUtil.*;