2

我最近通过在我的 pom.xml 中添加以下行来添加本文所述的字节码增强功能:

<plugin>
  <groupId>org.hibernate.orm.tooling</groupId>
  <artifactId>hibernate-enhance-maven-plugin</artifactId>
  <version>5.3.10.Final</version>
  <executions>
    <execution>
      <configuration>
        <enableDirtyTracking>true</enableDirtyTracking>
      </configuration>
      <goals>
        <goal>enhance</goal>
      </goals>
    </execution>
  </executions>
</plugin>

当我尝试运行时mvn clean install,出现以下错误:

[ERROR] Failed to execute goal org.hibernate.orm.tooling:hibernate-enhance-maven-plugin:5.3.10.Final:enhance (default) on project backend: Unable to enhance class: ExtrasBookingRequestDTO$ExtrasBookingRequestDTOBuilder.class: Failed to enhance class ExtrasBookingRequestDTO$ExtrasBookingRequestDTOBuilder: Unexpected type reference on method: 19 -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.hibernate.orm.tooling:hibernate-enhance-maven-plugin:5.3.10.Final:enhance (default) on project backend: Unable to enhance class: ExtrasBookingRequestDTO$ExtrasBookingRequestDTOBuilder.class
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:185)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call(MultiThreadedBuilder.java:181)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: org.apache.maven.plugin.MojoExecutionException: Unable to enhance class: ExtrasBookingRequestDTO$ExtrasBookingRequestDTOBuilder.class
    at org.hibernate.orm.tooling.maven.MavenEnhancePlugin.doEnhancement(MavenEnhancePlugin.java:227)
    at org.hibernate.orm.tooling.maven.MavenEnhancePlugin.execute(MavenEnhancePlugin.java:152)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    ... 11 more
Caused by: org.hibernate.bytecode.enhance.spi.EnhancementException: Failed to enhance class ExtrasBookingRequestDTO$ExtrasBookingRequestDTOBuilder
    at org.hibernate.bytecode.enhance.internal.bytebuddy.EnhancerImpl.enhance(EnhancerImpl.java:138)
    at org.hibernate.orm.tooling.maven.MavenEnhancePlugin.doEnhancement(MavenEnhancePlugin.java:222)
    ... 14 more
Caused by: java.lang.IllegalStateException: Unexpected type reference on method: 19
    at net.bytebuddy.pool.TypePool$Default$TypeExtractor$MethodExtractor.visitTypeAnnotation(TypePool.java:8198)
    at net.bytebuddy.jar.asm.ClassReader.readMethod(ClassReader.java:1213)
    at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:679)
    at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:391)
    at net.bytebuddy.pool.TypePool$Default.parse(TypePool.java:1176)
    at net.bytebuddy.pool.TypePool$Default.doDescribe(TypePool.java:1160)
    at net.bytebuddy.pool.TypePool$Default$WithLazyResolution.access$401(TypePool.java:1240)
    at net.bytebuddy.pool.TypePool$Default$WithLazyResolution.doResolve(TypePool.java:1338)
    at net.bytebuddy.pool.TypePool$Default$WithLazyResolution$LazyTypeDescription.delegate(TypePool.java:1407)
    at net.bytebuddy.description.type.TypeDescription$AbstractBase$OfSimpleType$WithDelegation.getModifiers(TypeDescription.java:8115)
    at net.bytebuddy.dynamic.scaffold.InstrumentedType$Factory$Default$1.represent(InstrumentedType.java:359)
    at net.bytebuddy.ByteBuddy.redefine(ByteBuddy.java:731)
    at org.hibernate.bytecode.enhance.internal.bytebuddy.EnhancerImpl.lambda$enhance$0(EnhancerImpl.java:133)
    at org.hibernate.bytecode.internal.bytebuddy.ByteBuddyState.rewrite(ByteBuddyState.java:149)
    at org.hibernate.bytecode.enhance.internal.bytebuddy.EnhancerImpl.enhance(EnhancerImpl.java:132)
    ... 15 more

从异常中我猜它与 Lombok 生成的 Builder 有关。IllegalStateException: Unexpected type reference on method: 19不幸的是,我在互联网上找不到任何有关的信息。这是 maven 失败的类:

import lombok.*;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class ExtrasBookingRequestDTO {

    @NotNull
    private Set<@Valid BookingExtraDTO> extras;

    @Size(max = 1000)
    private String notice;

    @NotNull
    private UUID temporaryBookingId;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ExtrasBookingRequestDTO that = (ExtrasBookingRequestDTO) o;
        return Objects.equals(extras, that.extras) &&
            Objects.equals(notice, that.notice) &&
            Objects.equals(temporaryBookingId, that.temporaryBookingId);
    }

    @Override
    public int hashCode() {
        return Objects.hash(extras, notice, temporaryBookingId);
    }
}


4

0 回答 0