一、產生的問題:html
maven項目執行單元測試能夠正常執行,可是執行maven命令test,則報一下異常:java
org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project support: Compilation failure: Compilation failure:
[ERROR] E:\workspace\support\src\test\java\com\test\spring\support\TestSpringContextHolder.java:[7,16] 錯誤: 程序包org.junit不存在
[ERROR] E:\workspace\support\src\test\java\com\test\spring\support\TestSpringContextHolder.java:[16,2] 錯誤: 找不到符號
[ERROR] 符號: 類 Test
[ERROR] 位置: 類 TestSpringContextHolder
[ERROR] E:\workspace\support\src\test\java\com\test\spring\support\TestSpringContextHolder.java:[29,2] 錯誤: 找不到符號
[ERROR] 符號: 類 Before
[ERROR] 位置: 類 TestSpringContextHolder
[ERROR] E:\workspace\support\src\test\java\com\test\spring\support\TestSpringContextHolder.java:[43,5] 錯誤: 找不到符號
二、產生上述錯誤的緣由:web
1)、maven項目,單元測試和運行使用不一樣的classpath,測試使用test-classpath,運行使用classpath;
2)、建立maven項目使用junit默認的版本爲3.8.1,它使用的是編程的方式,即便maven dependencies目錄引入了junit,但也沒法使用,只能經過build path添加junit支持spring
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
三、解決方案:apache
將junit的版本提升到4.x,配置代碼以下:編程
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 默認的版本爲3.8.1,修改成4.x,由於3.x使用的爲編程的方式,4.x爲註解的形式。 -->
<version>4.11</version>
<scope>test</scope>
</dependency>
四、補充:我上面貼出的異常目錄位於。。。\src\test\java\。。。,不是。。。\src\main\java\。。。,處理方式如上,若是異常發生在main目錄而不是test目錄,同時junit版本是4.x,解決方案則將scope屬性去掉:maven
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 默認的版本爲3.8.1,修改成4.x,由於3.x使用的爲編程的方式,4.x爲註解的形式。 -->
<version>4.11</version>
<!-- 去掉scope做用域,使用默認的compile,編譯、測試、運行都有效的做用域 -->
<!--<scope>test</scope>-->
</dependency>