首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring:-boot,-core,data-mongodb,-data-共用依赖项

spring:-boot,-core,data-mongodb,-data-共用依赖项
EN

Stack Overflow用户
提问于 2014-03-18 21:40:00
回答 1查看 2.1K关注 0票数 0

看来GA版本的

代码语言:javascript
复制
spring-core
spring-data-commons
spring-data-mongodb

以及最近发布的候选人

代码语言:javascript
复制
spring-boot-starter-web
spring-boot-autoconfigure

不兼容。

这些工件的哪个版本是相互兼容的?

我有一个非常基本的Application.java,它将两个对象放入MongoDB数据库,然后取出它们并将它们打印到屏幕上。

代码语言:javascript
复制
import game.acorn.entities.Entity;
import game.acorn.mRepositoryInterfaces.EntityRepository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application implements CommandLineRunner{

    @Autowired
    private EntityRepository repository;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    public void run(String... args) throws Exception {

        repository.deleteAll();

        repository.save(new Entity("Jack", "Skellington"));
        repository.save(new Entity("Blake", "Yarbrough"));

        System.out.println("Entities found");
        for (Entity entity : repository.findAll()){
            System.out.println(entity);
        }

        System.out.println();
        System.out.println("Entity by first name 'Jack'");
        System.out.println(repository.findByFirstName("Jack"));

        System.out.println();
        System.out.println("Entity by first name 'Blake'");
        System.out.println(repository.findByFirstName("Blake"));
    }


}

运行此应用程序时,

代码语言:javascript
复制
spring-core               version 4.0.2.RELEASE
spring-data-commons       version 1.5.0.RELEASE
spring-boot-starter-web   version 1.0.0.RC4
spring-data-mongodb       version 1.4.1.RELEASE
spring-boot-autoconfigure version 1.0.0.RC3

最后我得到了一个java.lang.NoClassDefFoundError

代码语言:javascript
复制
org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport.registerBeanDefinitions

看起来就像

代码语言:javascript
复制
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
        final BeanDefinitionRegistry registry) {
    new RepositoryConfigurationDelegate(getConfigurationSource(), this.resourceLoader)
            .registerRepositoriesIn(registry, getRepositoryConfigurationExtension());
}

使用

代码语言:javascript
复制
new RepositoryConfigurationDelegate(getConfigurationSource(), this.resourceLoader)

是第58行。在我使用的版本和spring-boot的依赖之间似乎存在差异。

所以我试着把我的spring-data-commons升级到version 1.7.0.RELEASE

然后类就可用了,但是我得到了一个java.lang.NoSuchMethodError

代码语言:javascript
复制
org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport$1.<init>(AbstractRepositoryConfigurationSourceSupport.java:66)

看起来就像

代码语言:javascript
复制
private AnnotationRepositoryConfigurationSource getConfigurationSource() {
        StandardAnnotationMetadata metadata = new StandardAnnotationMetadata(
                getConfiguration(), true);
        return new AnnotationRepositoryConfigurationSource(metadata, getAnnotation(),
                this.environment) {
            @Override
            public java.lang.Iterable<String> getBasePackages() {
                return AbstractRepositoryConfigurationSourceSupport.this
                        .getBasePackages();
            };
        };
    }

使用

代码语言:javascript
复制
return new AnnotationRepositoryConfigurationSource(metadata, getAnnotation(),
            this.environment) {

第65-66行。

当我退房时

代码语言:javascript
复制
org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource

我发现构造函数

代码语言:javascript
复制
public AnnotationRepositoryConfigurationSource(AnnotationMetadata metadata, Class<? extends Annotation> annotation,
            ResourceLoader resourceLoader, Environment environment) {

        super(environment);

        Assert.notNull(metadata);
        Assert.notNull(annotation);
        Assert.notNull(resourceLoader);

        this.attributes = new AnnotationAttributes(metadata.getAnnotationAttributes(annotation.getName()));
        this.metadata = metadata;
        this.resourceLoader = resourceLoader;
    }

期望比AbstractRepositoryConfigurationSourceSupportspring-boot-autoconfigure中给出的参数多一个参数。

所以,我的问题是,什么版本的

代码语言:javascript
复制
spring-core
spring-data-commons
spring-boot-starter-web
spring-data-mongodb
spring-boot-autoconfigure

互相兼容吗?

我的水看起来就像

代码语言:javascript
复制
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.0.0.RC3</version>
    </parent>
  <groupId>Master-Project</groupId>
  <artifactId>Master-Project</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <description>Master Project for MongoDB and Spring</description>

  <modules>
  </modules>

  <dependencies>

    <!-- Spring Stuff -->  

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.0.2.RELEASE</version>
    </dependency>  
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.4.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons</artifactId>
        <version>1.7.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>1.0.0.RC3</version>
    </dependency>



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

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

  </dependencies>
  <repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>http://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
    <!--
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.3</source>
          <target>1.1</target>
        </configuration>
      </plugin>
    -->
      <plugin>
        <groupId>org.apache.maven.plugin</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.9</version>
        <configuration>
            <downloadSources>true</downloadSources>
            <downloadJavadocs>true</downloadJavadocs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

当我删除依赖项上的版本标记时,我会得到同样的没有这样的方法异常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-22 09:18:54

如果您使用1.0.0.RC 5或更高版本的Spring依赖项pom (或初学者父级),这是固定的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22491638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档