一點一點學maven(11)——Eclipse開發Maven項目提示:程序包org.junit不存在解決方案

一、產生的問題: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>

解決思路參考:http://www.cnblogs.com/LiuChunfu/p/5598367.htmlsvg