问题背景
由于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