返回实体本身的方法(不是JavaBean方法)将被识别为未Map的属性(在gradle中)

uqjltbpv  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(81)

我定义了一个抽象类及其实现,如下所示。

@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)时,我的项目是可运行的。似乎不是构建配置问题。

2uluyalo

2uluyalo1#

我已经找到原因了
默认情况下,Gradle以warn级别输出日志,而Maven(maven-compiler-plugin)则不会。
我通过设置options.compilerArgs << "-Werror"将Gradle编译警告级别提高到错误级别。
😅

相关问题