当使用Gradle从导入的Java库中使用Groovy trait时,不正确的Java字节码(缺少注释枚举参数)
我面临着一些我自己无法解决的奇怪行为 我有以下特点:当使用Gradle从导入的Java库中使用Groovy trait时,不正确的Java字节码(缺少注释枚举参数),java,gradle,groovy,traits,Java,Gradle,Groovy,Traits,我面临着一些我自己无法解决的奇怪行为 我有以下特点: @MappedSuperclass trait CreatedAt implements ICreatedAt { private LocalDateTime createdAt; @Column(name = "CREATED_AT", nullable = false, updatable = false) @CreatedDate @Access(AccessType.PROPER
@MappedSuperclass
trait CreatedAt implements ICreatedAt {
private LocalDateTime createdAt;
@Column(name = "CREATED_AT", nullable = false, updatable = false)
@CreatedDate
@Access(AccessType.PROPERTY)
LocalDateTime getCreatedAt() {
return this.createdAt
}
void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt
}
}
我有一个groovy类MyClazz实现了这一点
@Entity
@EntityListeners([AuditingEntityListener.class])
@Table(name = "APP")
class App extends SequenceIdEntity<Long> implements CreatedAt {
@Column(name = "CLOUD_ID", nullable = false)
String cloudId;
...
...
}
但当trait位于使用gradle导入的外部库中时,MyClazz(不同的部分)文件的.class文件如下所示:
@Column(nullable = false, name = "CREATED_AT", updatable = false)
@CreatedDate
@Access(AccessType.PROPERTY)
@TraitBridge(traitClass = CreatedAt.class, desc = "()Ljava/time/LocalDateTime;")
public LocalDateTime getCreatedAt() {
...
}
@Column(nullable = false, name = "CREATED_AT", updatable = false)
@CreatedDate
@Access
@TraitBridge(traitClass = CreatedAt.class, desc = "()Ljava/time/LocalDateTime;")
public LocalDateTime getCreatedAt() {
...
}
因此,不同之处在于导入时缺少@Access(AccessType.PROPERTY)枚举参数
我还试图检查jar文件中的trait是什么样子的,注释参数是否存在。我还完全手动删除了所有缓存,并从零开始将projets重新导入intelliJ以确保安全
这给我目前正在实施的事情带来了很大的问题,所以我的问题是。。。
是GradleGroovy插件造成的吗?还是别的什么?
有没有办法更深入地挖掘?
有什么解决办法吗
我目前还不确定下一步该怎么做
使用的版本有Gradle 6.7、Groovy 2.5.13和Java 11
谢谢你给我提的建议
Lukas同样的行为也在Groovy 3.0.6和Java 15上重现