2013-07-17 2 views
2

Я борюсь, чтобы сделать junit для моего кода, я использую весну 3.2.3, когда использую Spring 3.0.2, она работает нормально. Этот вопрос такой же, как и Spring JUnit Test Error, но в примере, который он сказал использовать транзитивную зависимость (что я не понимаю, что это такое). то, что я понял из ответа, заключается в том, чтобы исключить более раннюю версию банок (разрешенная зависимость). Однако, когда я проверил из иерархии зависимостей я мог бы найти, что все зависимости разрешили до версии 3.2.3 и нет более старой версии зависимостейПроблема зависимости Spring Maven во время JUNIT

Моего pom.xml является

<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> 

    <groupId>org.company</groupId> 
    <artifactId>artifact</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>artifact</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <org.springframework.version>3.2.3.RELEASE</org.springframework.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-expression</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-oxm</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc-portlet</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    </dependencies> 

    <build> 
    <resources> 
     <resource> 
      <filtering>true</filtering> 
      <directory>src/test/resources</directory> 
      <includes> 
       <include>**/*.properties</include> 
      </includes> 
      <excludes> 
       <exclude>**/*local.properties</exclude> 
      </excludes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <includes> 
       <include>**/*.properties</include> 
       <include>**/*.xml</include> 
      </includes> 
     </resource> 
    </resources> 
    <testResources> 
        <testResource> 
        <directory>src/test/java</directory> 
        <includes> 
         <include>**/*</include> 
        </includes> 
        <excludes> 
         <exclude>**/*.java</exclude> 
        </excludes> 
        </testResource> 
        <testResource> 
        <directory>src/test/resources</directory> 
        <includes> 
         <include>**/*</include> 
        </includes> 
        </testResource> 
       </testResources> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.3</version> 
     <configuration> 
      <warSourceDirectory>WebContent</warSourceDirectory> 
      <failOnMissingWebXml>false</failOnMissingWebXml> 
     </configuration> 
     </plugin> 
    </plugins> 

    </build> 

</project> 

и стек трассировки ,

java.lang.NoSuchMethodError: org.springframework.beans.BeanUtils.instantiateClass(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object; 
    at org.springframework.test.context.ContextLoaderUtils.resolveContextLoader(ContextLoaderUtils.java:118) 
    at org.springframework.test.context.ContextLoaderUtils.buildMergedContextConfiguration(ContextLoaderUtils.java:594) 
    at org.springframework.test.context.ContextLoaderUtils.buildMergedContextConfiguration(ContextLoaderUtils.java:560) 
    at org.springframework.test.context.TestContext.<init>(TestContext.java:99) 
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:117) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:119) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:108) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

Как начинающий парень Maven, может кто-нибудь помочь мне, что именно мне нужно сделать

Моего примера Junit класс

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath*:spring-config.xml") 
public class HelloWorldTest { 


    @Autowired 
    public HelloWorld hello1; 

    @Test 
    public void sayHelloTest(){ 
     hello1.printHello(); 
    } 
} 
+0

зависимость 'spring-test' явно не указана в вашем POM. Не могли бы вы попытаться добавить его и посмотреть, не изменилось ли это? –

+0

Спасибо за быстрый ответ. Я скопировал неправильный файл pom. исправить его сейчас –

+0

Ваш POM кажется ОК. Поскольку вы запускаете свой тест из Eclipse, я подозреваю разницу между зависимостями, объявленными в вашем POM, и зависимостями, которые действительно используются Eclipse. Вы должны проверить зависимости проекта Eclipse, чтобы увидеть, использует ли он всю весну 3.2.3. BTW с использованием области «предоставлено» для зависимостей Spring очень странно. Scope 'compile' должен быть лучше (за исключением' spring-test', который должен иметь область 'test') –

ответ

2

Я решил эту проблему путем проверки Будет связанных с весной, которая была с более ранней версией версии весны, которую я использовал.

Например, я использовал версию 3.2.4 весны, и в моих зависимостях я обнаружил, что весенне-фасонные и весенние выражения были с версией 3.0.4. То, что я сделал, это добавить эти два в мои зависимости pom.xml к версии весны, которую я использовал. в этом случае добавлено

<dependency> 
    <groupId> org.springframework </ groupId> 
    <artifactId> spring-beans </ artifactId> 
    <version> ${spring.version} </ version> 
</ dependency> 
<dependency> 
    <groupId> org.springframework </ groupId> 
    <artifactId> spring-expression </ artifactId> 
    <version> $ {spring.version} </ version> 
</ dependency> 

, и это сработало.

-1

используйте команду: МВН зависимость: дерево и вы увидите все зависимости для вас Maven проекта пытаются иметь ту же версию пружины для всех ваших весенних зависимостей. Использовать исключения в зависимостях. это очень помогает. Надеюсь это поможет.

Смежные вопросы