【问题标题】:java.lang.NoSuchMethodError Error while connecting mongoDb through Springjava.lang.NoSuchMethodError 通过 Spring 连接 mongoDb 时出错
【发布时间】:2017-02-27 08:56:57
【问题描述】:

我正在尝试通过 Spring 的 mongoTemplate 连接 mongoDb。但是,在对数据库执行 CRUD 操作时,我收到 java.lang.NoSuchMethodError: org.springframework.data.mongodb.core.mapping.MongoPersistentEntity.hasVersionProperty()Z 错误

这是我的 pom.xml

    <!-- Spring framework -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.2.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.2.2.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- mongodb java driver -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.10.1</version>
    </dependency>

    <!-- Spring data mongodb -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.2.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.mongodb</groupId>
                <artifactId>mongo-java-driver</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
            </exclusion>
            <exclusion>
                <groupId>aopalliance</groupId>
                <artifactId>aopalliance</artifactId>
            </exclusion>
            <!-- <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion> -->
            <!-- <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
            </exclusion> -->
            <exclusion>
                <artifactId>spring-beans</artifactId>
                <groupId>org.springframework</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>2.2.2</version>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <downloadSources>true</downloadSources>
                <downloadJavadocs>true</downloadJavadocs>
            </configuration>
        </plugin>
    </plugins>
</build>

我的mongo配置文件

@Configuration
public class SpringMongoConfig1 {

    @Bean
    MongoDbFactory mongoDbFactory() throws Exception{
        return new SimpleMongoDbFactory(new MongoClient(), "storeApp");
    }

    @Bean
    MongoTemplate mongoTemplate() throws Exception{
        MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
        return mongoTemplate;
    }
}

项目的主类

public class StoreMainApp {

    public static void main(String[] args) {

        System.out.println("into main method");

        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig1.class);
        MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate");


        Store store1 = new Store("Sample store 1", "Street 1", "City 1", (float) 35.4);
        System.out.println("store1 city : "+store1.storeCity);


        mongoOperation.insert(store1);
    }
}

如果我使用 mongoOperation.createCollection("stores");,它可以正常工作,并且在数据库中创建了一个名为 stores 的集合,但是任何 mongoOperation.save() 或 mongoOperation.insert() 方法都没有运行。

以下堆栈跟踪:

  Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.data.mongodb.core.mapping.MongoPersistentEntity.hasVersionProperty()Z
        at org.springframework.data.mongodb.core.MongoTemplate.initializeVersionProperty(MongoTemplate.java:669)
        at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:651)
        at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:613)
        at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:604)
        at com.storeApp.core.StoreMainApp.main(StoreMainApp.java:33)

【问题讨论】:

  • 您确定您的项目可以使用更新后的 pom.xml 进行编译吗?我试过了,它给出了编译错误。

标签: java spring mongodb maven


【解决方案1】:

发出mvn dependency:tree -Dverbose 将显示您是否有任何 jar 冲突。我自己执行了命令,我可以看到你有 mongo-java-driver 到版本 2.11.0 而在 org.springframework.data:spring-data-mongodb:jar:1.2.0.RELEASE 引用 org.mongodb:mongo-java-driver:jar:2.10.1

所以请确保你有相同版本的 jars 冲突。

[INFO] +- org.springframework:spring-core:jar:3.2.2.RELEASE:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- org.springframework:spring-context:jar:3.2.2.RELEASE:compile
[INFO] |  +- org.springframework:spring-aop:jar:3.2.2.RELEASE:compile
[INFO] |  |  +- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  |  +- (org.springframework:spring-beans:jar:3.2.2.RELEASE:compile - omitted for duplicate)
[INFO] |  |  \- (org.springframework:spring-core:jar:3.2.2.RELEASE:compile - omitted for duplicate)
[INFO] |  +- org.springframework:spring-beans:jar:3.2.2.RELEASE:compile
[INFO] |  |  \- (org.springframework:spring-core:jar:3.2.2.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-core:jar:3.2.2.RELEASE:compile - omitted for duplicate)
[INFO] |  \- org.springframework:spring-expression:jar:3.2.2.RELEASE:compile
[INFO] |     \- (org.springframework:spring-core:jar:3.2.2.RELEASE:compile - omitted for duplicate)
[INFO] +- org.mongodb:mongo-java-driver:jar:2.11.0:compile
[INFO] +- org.springframework.data:spring-data-mongodb:jar:1.2.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-tx:jar:3.1.4.RELEASE:compile
[INFO] |  |  +- (aopalliance:aopalliance:jar:1.0:compile - omitted for duplicate)
[INFO] |  |  +- (org.springframework:spring-aop:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] |  |  +- (org.springframework:spring-beans:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] |  |  +- (org.springframework:spring-context:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] |  |  \- (org.springframework:spring-core:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] |  +- (org.springframework:spring-context:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] |  +- (org.springframework:spring-beans:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] |  +- (org.springframework:spring-core:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] |  +- (org.springframework:spring-expression:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] |  +- org.springframework.data:spring-data-commons:jar:1.5.0.RELEASE:compile
[INFO] |  |  +- (org.springframework:spring-core:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] |  |  +- (org.springframework:spring-beans:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] |  |  +- (org.slf4j:slf4j-api:jar:1.7.1:compile - omitted for conflict with 1.7.21)
[INFO] |  |  \- (org.slf4j:jcl-over-slf4j:jar:1.7.1:runtime - omitted for conflict with 1.7.1)
[INFO] |  +- (org.mongodb:mongo-java-driver:jar:2.10.1:compile - omitted for conflict with 2.11.0)
[INFO] |  +- (org.slf4j:slf4j-api:jar:1.7.1:compile - omitted for conflict with 1.7.21)
[INFO] |  \- (org.slf4j:jcl-over-slf4j:jar:1.7.1:compile - scope updated from runtime; omitted for duplicate)
[INFO] \- cglib:cglib:jar:2.2.2:compile
[INFO]    \- asm:asm:jar:3.3.1:compile

更新

这个 pom.xml 对我有用:

<dependencies>
    <!-- Spring framework -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.2.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.2.2.RELEASE</version>
    </dependency>

    <!-- mongodb java driver -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.10.1</version>
    </dependency>

    <!-- Spring data mongodb -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.2.0.RELEASE</version>

    </dependency>

    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>2.2.2</version>
    </dependency>

</dependencies>

确保您清理并构建您的项目。

【讨论】:

  • 谢谢....我删除了所有冲突的依赖项,仍然存在错误。
  • 你如何运行你的项目?是jar 还是war?你如何建造它?您是否在构建之前发布了一个干净的问题,例如mvn clean package ? hasProperty() 方法应该在 MongoPersistentEntity 超类中可用,如果您还下载了依赖项的源代码,您应该能够看到它。
  • 我将使用 jar 来运行它,但现在为了测试它,我通过创建 main 方法来运行它。
猜你喜欢
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 2014-07-26
  • 2020-11-27
  • 2021-05-13
相关资源
最近更新 更多