maven 編譯 run test的時候控制檯輸出亂碼信息

直接運行 junit測試用例的時候,輸出中文正常sql

用 eclipse-->run as --> maven test  就出現中文亂碼apache

maven-surefire-plugin是運行mvn test時執行測試的插件,eclipse

其有一個配置參數forkMode,默認爲once,即表示每次運行test時,新建一個JVM進程運行全部test.maven

這可能會致使亂碼問題.首先將forkMode設置爲never,即不新建.再運行mvn test,所有OK了.果真是這個問題!! 單元測試

因而再找官方參數說明,發現了argLine參數,這個參數與forkMode一塊兒使用,能夠設置新建JVM時的JVM啓動參數,測試

因而設置<argLine>-Dfile.encoding=UTF-8</argLine>,明確指定一下JVM的file.encoding,並將forkMode從never改回once,ui

仍是每次新建一個JVM進程.再次運行mvn test,一塊兒OK了,問題解決.編碼

 

究其緣由,是由於MAVEN的maven-surefire-plugin在新建JVM進程後,因爲沒有指定encoding,插件

採用了OS的默認編碼,致使讀取UTF-8文件(測試類的sql腳本文件)時出現亂碼code

 

部分 pom.xml 代碼

<build>
		<plugins>
			<!-- 解決maven test命令時console出現中文亂碼亂碼 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.7.2</version>
				<configuration>
					<forkMode>once</forkMode><!--默認,能夠不配置-->
 					<argLine>-Dfile.encoding=UTF-8</argLine> 
<!-- 					<systemProperties> -->
<!-- 						<property> -->
<!-- 							<name>net.sourceforge.cobertura.datafile</name> -->
<!-- 							<value>target/cobertura/cobertura.ser</value> -->
<!-- 						</property> -->
<!-- 					</systemProperties> -->
				</configuration>
			</plugin>
		</plugins>
	</build>

跳過單元測試

<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.5</version>
				<configuration>
				  <argLine>-Dfile.encoding=UTF-8</argLine>
				   <skip>true</skip>   
				</configuration>
			</plugin>
相關文章
相關標籤/搜索