问题背景
由于jenkins需要部署不同的项目,需要使用不同的jdk版本,所以需要配置单独的settings.xml,使用指定的jdk版本进行编译,这里需要单独的maven设置,在配置完后进行mvn的install的时候,由于存在中文注释会报错GBK不可映射字符。
刚开始笔者以为是mvn的默认编码是GBK造成的,在pom.xml文件配置了一堆encoding为utf-8的配置(完全按照maven官网配置),发现无论怎么配置都无效。
后来笔者尝试使用cmd命令的javac来单独编译文件,发现原来是由于win10的jdk格式默认是GBK,导致无法编译,后来使用javac -encoding utf-8 Test.java来完成了编译。
最终笔者在环境变量配置了UTF-8的编码来实现工程编译。
在找不到错误的时候,笔者想到了最简单直接的javac编译来验证问题出在哪里。因为maven底层也是借助jdk的javac来实现编译,只不过它实现了自动化编译,但原理都是一样。
解决办法
在maven指定使用不同的JDK编译
pom.xml配置:
<project>[...]<build>[...]<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><verbose>true</verbose><fork>true</fork><executable><!-- path-to-javac --></executable><compilerVersion>1.3</compilerVersion></configuration></plugin></plugins>[...]</build>[...]
</project>
为了避免硬编码,可以使用变量:
<executable>${JAVA_1_4_HOME}/bin/javac</executable>
maven的conf下的settings.xml文件配置 :
<settings>[...]<profiles>[...]<profile><id>compiler</id><properties><JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME></properties></profile></profiles>[...]<activeProfiles><activeProfile>compiler</activeProfile></activeProfiles>
</settings>
具体见官网: Apache Maven Compiler Plugin – Compiling Sources Using A Different JDK
设置maven编码UTF-8
mvn -version 默认是这样的
新建系统环境变量名为MAVEN_OPTS,值为 -Xms256m -Xmx512m -Dfile.encoding=UTF-8
设置JDK编码为UTF-8
系统变量: 设置 JAVA_TOOL_OPTIONS 的值为 -Dfile.encoding=UTF-8