今天在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>