当前位置: 首页 > article >正文

win10 下 mvn install 报错:编码GBK不可映射字符

问题背景

       由于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


http://www.kler.cn/news/150285.html

相关文章:

  • vue项目运行时,报错:ValidationError: webpack Dev Server Invalid Options
  • 谨慎Apache-Zookeeper-3.5.5以后在CentOS7.X安装的坑
  • 数据结构中的二分查找(折半查找)
  • vue+el-tooltip 封装提示框组件,只有溢出才提示
  • Findreport中框架图使用的注意事项
  • [原创][2]探究C#多线程开发细节-”线程的无顺序性“
  • c++实现程序单例运行的两种方式
  • Azure Machine Learning - 创建Azure AI搜索索引
  • Spring-AOP与声明式事务
  • Linux socket编程(8):shutdown和close的区别详解及例子
  • 《尚品甄选》:后台系统——分类品牌和规格管理(debug一遍)
  • Docker容器网络模式
  • PHP如何实现邮箱验证
  • Android控件全解手册 - 多语言切换完美解决方案(兼容7.0以上版本)
  • 找不到 sun.misc.BASE64Decoder ,sun.misc.BASE64Encoder 类
  • ESP32-Web-Server 实战编程- 使用 AJAX 自动更新网页内容
  • pytest分布式执行(pytest-xdist)
  • rabbitmq-server-3.11.10.exe
  • 基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(三)
  • Linux CentOS7 fdisk
  • 面试题:Spring 中获取 Bean 的方式有哪些?
  • 如何生成唯一ID:探讨常用方法与技术应用
  • 运维知识点-openResty
  • 代码随想录-刷题第七天
  • element table滚动到底部加载数据(vue3)
  • C语言进阶指南(11)(指针数组与二维数组)
  • 拉普拉斯变换
  • 字母大小写转换
  • PHP微信UI在线聊天系统源码 客服私有即时通讯系统 附安装教程
  • kafka C++实现生产者