英文:
java.lang.NoClassDefFoundError: com/datastax/oss/driver/api/mapper/entity/naming/GetterStyle
问题
我正在使用Spring Boot和Gradle 7.6构建Cassandra DataStax 4.14。
Gradle文件:
plugins {
id 'java'
id 'org.springframework.boot' version '2.3.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'io.freefair.lombok' version '6.6.3'
}
dependencies {
...
implementation 'io.github.lognet:grpc-spring-boot-starter:4.5.4'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
// Cassandra
annotationProcessor group: 'org.projectlombok', name: 'lombok', version: lombokVersion
annotationProcessor group: 'com.datastax.oss', name: 'java-driver-mapper-processor', version: cassandraSdkVersion
implementation "com.datastax.oss:java-driver-mapper-runtime:4.14.0"
implementation "com.datastax.oss:java-driver-core:4.14.0"
implementation "com.datastax.oss:java-driver-query-builder:4.14.0"
compileOnly group: 'org.projectlombok', name: 'lombok', version: lombokVersion
// 强制使用原生协议
implementation "com.datastax.oss:native-protocol:1.5.1"
...
}
我的代码的简单示例:
import com.datastax.oss.driver.api.mapper.annotations.Mapper;
import com.datastax.oss.driver.api.mapper.annotations.DaoFactory;
import com.datastax.oss.driver.api.mapper.annotations.DaoKeyspace;
import com.datastax.oss.driver.api.mapper.annotations.DaoTable;
import com.datastax.oss.driver.api.mapper.annotations.Dao;
import com.datastax.oss.driver.api.core.CqlSession;
@Mapper
public interface CassandraMapper {
static CassandraMapper build(CqlSession session) {
return new CassandraMapper(session).build();
}
@DaoFactory
ExampleDao exampleDao(@DaoKeyspace String keyspace, @DaoTable String table);
}
实体类:
import lombok.Builder;
import lombok.Data;
import com.datastax.oss.driver.api.mapper.annotations.Entity;
import com.datastax.oss.driver.api.mapper.annotations.PartitionKey;
@Data
@Builder
@Entity
public class EntityObject {
@PartitionKey private long id;
private Long version;
}
当我尝试运行gradle compileJava
时,我收到以下错误消息:
java.lang.NoClassDefFoundError: com/datastax/oss/driver/api/mapper/entity/naming/GetterStyle
我尝试配置annotationProcessor
,并阅读了文档 https://docs.datastax.com/en/developer/java-driver/4.14/manual/mapper/config/lombok/ 和 https://github.com/DataStax-Examples/object-mapper-jvm/tree/master/lombok,但似乎找不到任何问题。
英文:
I am building Cassandra datastax 4.14 with Spring Boot and gradle 7.6
Gradle file:
plugins {
id 'java'
id 'org.springframework.boot' version "2.3.5.RELEASE"
id 'io.spring.dependency-management' version "1.0.9.RELEASE"
id "io.freefair.lombok" version "6.6.3"
}
dependencies {
...
implementation 'io.github.lognet:grpc-spring-boot-starter:4.5.4'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
// Cassandra
annotationProcessor group: 'org.projectlombok', name: 'lombok', version: lombokVersion
annotationProcessor group: 'com.datastax.oss', name: 'java-driver-mapper-processor', version: cassandraSdkVersion
implementation "com.datastax.oss:java-driver-mapper-runtime:4.14.0"
implementation "com.datastax.oss:java-driver-core:4.14.0"
implementation "com.datastax.oss:java-driver-query-builder:4.14.0"
compileOnly group: 'org.projectlombok', name: 'lombok', version: lombokVersion
// Force native protocol.
implementation "com.datastax.oss:native-protocol:1.5.1"
...
}
Simple Example of my code
import com.datastax.oss.driver.api.mapper.annotations.Mapper;
import com.datastax.oss.driver.api.mapper.annotations.DaoFactory;
import com.datastax.oss.driver.api.mapper.annotations.DaoKeyspace;
import com.datastax.oss.driver.api.mapper.annotations.DaoTable;
import com.datastax.oss.driver.api.mapper.annotations.Dao;
import com.datastax.oss.driver.api.core.CqlSession;
@Mapper
public interface CassandraMapper {
static CassandraMapper build(CqlSession session) {
return new CassandraMapper(session).build();
}
@DaoFactory
ExampleDao exampleDao(@DaoKeyspace String keyspace, @DaoTable String table);
}
Entity
import lombok.Builder;
import lombok.Data;
import com.datastax.oss.driver.api.mapper.annotations.Entity;
import com.datastax.oss.driver.api.mapper.annotations.PartitionKey;
@Data
@Builder
@Entity
public class EntityObject {
@PartitionKey private long id;
private Long version;
}
When I try to run gradle compileJava, I get the error:
java.lang.NoClassDefFoundError: com/datastax/oss/driver/api/mapper/entity/naming/GetterStyle
I've tried configuring annotationProcessor, I've read the docs at https://docs.datastax.com/en/developer/java-driver/4.14/manual/mapper/config/lombok/ and
https://github.com/DataStax-Examples/object-mapper-jvm/tree/master/lombok, but I can't seem to find any issues.
答案1
得分: 0
看起来是 Spring 依赖管理降级了我的映射器库。
我在我的 Gradle 文件中添加了 annotationProcessor "com.datastax.oss:java-driver-mapper-runtime:4.14.0"
以强制使用正确的版本,现在可以构建了。
英文:
It looks like spring dependency management was downgrading my mapper library.
I added annotationProcessor "com.datastax.oss:java-driver-mapper-runtime:4.14.0"
to my gradle file to force the correct version, and it builds now.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论