Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring:-boot、-core、数据mongodb、-datacommons依赖项_Java_Spring_Mongodb_Spring Boot_Spring Mongo - Fatal编程技术网

Java spring:-boot、-core、数据mongodb、-datacommons依赖项

Java spring:-boot、-core、数据mongodb、-datacommons依赖项,java,spring,mongodb,spring-boot,spring-mongo,Java,Spring,Mongodb,Spring Boot,Spring Mongo,似乎GA版本的 spring-core spring-data-commons spring-data-mongodb spring-core spring-data-commons spring-boot-starter-web spring-data-mongodb spring-boot-autoconfigure 以及最新的候选版本 spring-boot-starter-web spring-boot-autoconfigure 不兼容 这些工件的哪些版本彼此兼容 我有一个非常基

似乎GA版本的

spring-core
spring-data-commons
spring-data-mongodb
spring-core
spring-data-commons
spring-boot-starter-web
spring-data-mongodb
spring-boot-autoconfigure
以及最新的候选版本

spring-boot-starter-web
spring-boot-autoconfigure
不兼容

这些工件的哪些版本彼此兼容

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

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"));
    }


}
当我用

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

org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport.registerBeanDefinitions
org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport$1.<init>(AbstractRepositoryConfigurationSourceSupport.java:66)
看起来像

public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
        final BeanDefinitionRegistry registry) {
    new RepositoryConfigurationDelegate(getConfigurationSource(), this.resourceLoader)
            .registerRepositoriesIn(registry, getRepositoryConfigurationExtension());
}
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();
            };
        };
    }
<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>

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

因此,我尝试将我的
spring数据共享版本升级到
1.7.0版

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

org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport.registerBeanDefinitions
org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport$1.<init>(AbstractRepositoryConfigurationSourceSupport.java:66)
第65-66行

当我退房时

org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource
我发现构造器

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;
    }
彼此兼容吗

我的pom看起来像

public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
        final BeanDefinitionRegistry registry) {
    new RepositoryConfigurationDelegate(getConfigurationSource(), this.resourceLoader)
            .registerRepositoriesIn(registry, getRepositoryConfigurationExtension());
}
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();
            };
        };
    }
<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>

4.0.0
org.springframework.boot
spring启动程序父级
1.0.0.RC3
主项目
主项目
0.0.1-快照
MongoDB和Spring的主项目
org.springframework
弹簧芯
4.0.2.1发布
org.springframework
spring上下文
org.springframework.data
spring数据mongodb
1.4.1.1发布
org.springframework.data
spring数据共享
1.7.0.1发布
org.springframework.boot
SpringBootStarterWeb
1.0.0.RC3
org.mongodb
mongo java驱动程序
cglib
cglib
3.1
春季里程碑
春季里程碑
http://repo.spring.io/milestone
假的
src
org.apache.maven.plugin
maven eclipse插件
2.9
真的
真的

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

如果您使用1.0.0.RC5或更高版本的Spring Boot dependencies pom(或starter父级),这是固定的。

首先,您有内部版本不匹配。为什么您要使用
starter web的1.0.0.RC4和
自动配置的1.0.0.RC3?此外,请张贴您的项目POM;看起来你正在手动覆盖几个版本。您需要的唯一依赖项是spring boot starter-[web,data mongodb]。如果您想要最新的Spring数据依赖项,请使用快照版本(1.0可能在下周发布,因此快照可能比RC4更接近最终版本)。应用程序类位于哪个包?我将POM依赖项更新为RC4并删除了版本覆盖,这解决了问题。