今天在DOS下執行mvn compile命令時報錯說缺少必要符號,事實上根本就沒有缺少,但何以如此呢,為啥eclipse在編譯時就沒有這問題呢?
原因是編碼的問題造成的!
eclipse在編譯的使用使用的是UTF-8,因為整個項目設置的是UTF-8格式編碼。
當在DOS下執行mvn compile命令時,默認使用的是系統的GBK格式編碼。
問題解決方案是在pom.xml文件中添加如下代碼
1 <properties> 2 <!-- 文件拷貝時的編碼 --> 3 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 4 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 5 <!-- 編譯時的編碼 --> 6 <maven.compiler.encoding>UTF-8</maven.compiler.encoding> 7 </properties>
或者添加如下代碼:
1 <plugin> 2 <groupId>org.apache.maven.plugins</groupId> 3 <artifactId>maven-compiler-plugin</artifactId> 4 <version>3.1</version> 5 <configuration> 6 <source>1.5</source> 7 <target>1.5</target> 8 <encoding>UTF-8</encoding><!-- 指定編碼格式,否則在DOS下運行mvn compile命令時會出現莫名的錯誤,因為系統默認使用GBK編碼 --> 9 </configuration> 10 </plugin> 11 <plugin> 12 <groupId>org.apache.maven.plugins</groupId> 13 <artifactId>maven-resources-plugin</artifactId> 14 <version>2.6</version> 15 <configuration> 16 <encoding>UTF-8</encoding><!-- 指定編碼格式,否則在DOS下運行mvn命令時當發生文件資源copy時將使用系統默認使用GBK編碼 --> 17 </configuration> 18 </plugin>
轉自:https://songjianyong.iteye.com/blog/1910143
附:
maven-compiler-plugin插件是一個Maven插件,用來編譯項目代碼;自從3.0開始默認的編譯器是javax.tools.JavaCompiler,用來編譯Java源碼;如果你想強制插件使用javac編譯器,你必須配置插件的屬性forceJavacCompilerUse;還要注意,當前默認源(source)設置為1.6,默認目標(target)設置為1.6。獨立運行Maven和JDK,可以通過source和target選項更改他們的默認值。
插件設置的各種參數信息請查看:http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#forceJavacCompilerUse
1 <plugins> 2 <plugin> 3 <groupId>org.apache.maven.plugins</groupId> 4 <artifactId>maven-compiler-plugin</artifactId> 5 <version>2.3.2</version> 6 <configuration> 7 <source>1.7</source> <!-- 源代碼使用的開發版本 --> 8 <target>1.7</target> <!-- 需要生成的目標class文件的編譯版本 --> 9 <!-- 一般而言,target與source是保持一致的,但是,有時候為了讓程序能在其他版本的jdk中運行(對於低版本目標jdk,源代碼中需要沒有使用低版本jdk中不支持的語法),會存在target不同於source的情況 --> 10 <encoding>UTF-8</encoding> <!-- 編譯是的字符編碼 --> 11 </configuration> 12 </plugin> 13 </plugins>