我定义了一个抽象类及其实现,如下所示。
@MappedSuperclass
@EntityListeners(CRUDListener.class)
public abstract class AbstractAR<A extends AbstractAR<A, ID>, ID> extends AbstractAggregateRoot<A> implements DomainEntity<A, ID> {
public void validate() {
}
protected boolean enableSelectEvent() {
return false;
}
@SuppressWarnings("unchecked")
public A update(Consumer<A> updater) {
A a = (A) this;
updater.accept(a);
return a;
}
}
@Getter
@Setter
@ToString(callSuper = true)
@NoArgsConstructor
@Entity
@Table(name = SimpleDO.TABLE_NAME)
public class SimpleDO extends AbstractAR<SimpleDO, String> {
public static final String TABLE_NAME = "simple_table";
@Id
private String id;
@Column(name = "name", nullable = false)
@Comment("name")
private String name;
}
字符串
将Mapstruct与Gradle项目一起使用时,会导致编译错误(未Map目标属性:“update”),这显然不是JavaBean方法。这意味着我必须显式声明忽略目标属性(update)才能成功编译。
Tips:我可以使用相同版本的Mapstruct(1. 4. 2. Final)在maven项目中成功编译和运行相同的代码。
Gradle和Maven之间的差异是由什么引起的?
// My gradle script
dependencies {
implementation 'org.mapstruct:mapstruct'
implementation 'org.mapstruct:mapstruct-jdk8'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding'
annotationProcessor 'org.mapstruct:mapstruct'
annotationProcessor 'org.mapstruct:mapstruct-processor'
annotationProcessor 'org.mapstruct:mapstruct-jdk8'
testAnnotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
testAnnotationProcessor 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok-mapstruct-binding'
testAnnotationProcessor 'org.mapstruct:mapstruct'
testAnnotationProcessor 'org.mapstruct:mapstruct-processor'
testAnnotationProcessor 'org.mapstruct:mapstruct-jdk8'
}
<!-- My maven pom.xml -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>${mapstruct.version}</version>
</path>
<path>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${spring-boot.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
的数据
我已经尝试了mapstrcut版本1.5.5.Final和1.4.2.Final。当我在mapping方法中声明@Mapping(target = "update", ignore = true)
时,我的项目是可运行的。似乎不是构建配置问题。
1条答案
按热度按时间2uluyalo1#
我已经找到原因了
默认情况下,Gradle以warn级别输出日志,而Maven(maven-compiler-plugin)则不会。
我通过设置
options.compilerArgs << "-Werror"
将Gradle编译警告级别提高到错误级别。😅