`

windows下关于修复log4j2漏洞时,下载源码编译报错未定义toolchains的解决步骤

阅读更多

漏洞的原理就不解释了,网上很多。这里写一下编译过程中报错的解决办法。

 

编译过程中可能遇到几个错误:

 

1、maven环境配置问题:

 

[ERROR] Please make sure you define the required toolchains in your ~/.m2/toolchains.xml file.

 

2、jdk版本错误:

 

[ERROR] jdk [ version='[11, )' ]

或者 : 

 [ERROR] jdk [ version='[9, )' ]

 

我这是在win10下的操作步骤,有linux下的同学可参考类似的操作:

 

1、下载源文件:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

 

2、解压到一个目录,我这里解压到 F:\code\log4j-2.15.0-rc2 下

 

3、打开cmd窗口,cd /d f:\code\log4j-2.15.0-rc2

 

4、运行maven的打包命令:mvn clean package -Dmaven.test.skip=true

 

结果报错:

 

[ERROR] Please make sure you define the required toolchains in your ~/.m2/toolchains.xml file.

 

解决办法:

 

1、安装相应版本的jdk

 

由于我的电脑只安装了jdk7和jdk8,当看到有jdk可能需要version=9时,我想到可能是需要新版本的jdk才能编译通过,于是偷个懒,干脆直接下载一个jdk17的最新稳定版本来编译,因为最新版一般是可以向下兼容的。下载地址:https://download.java.net/java/GA/jdk17.0.1/2a2082e5a09d4267845be086888add4f/12/GPL/openjdk-17.0.1_windows-x64_bin.zip

 

下载完后解压出来,我的所有jdk版本都是安装在d:\jdk下,即d:\jdk\jdk7, d:\jdk\jdk8, d:\jdk\jdk17。

 

2、修改编译的配置文件:在源码目录有一个文件:toolchains-sample-win.xml,用编辑器打开后,在里面添加内容:(jdk路径根据实际情况修改)

 

<toolchain>
    <type>jdk</type>
    <provides>
      <version>1.7</version>
      <vendor>sun</vendor>
    </provides>
    <configuration>
      <jdkHome>D:\jdk\jdk7</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>1.8</version>
      <vendor>sun</vendor>
    </provides>
    <configuration>
      <jdkHome>D:\jdk\jdk8</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>9</version>
      <vendor>sun</vendor>
    </provides>
    <configuration>
      <jdkHome>D:\jdk\jdk17</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>11</version>
      <vendor>sun</vendor>
    </provides>
    <configuration>
      <jdkHome>D:\jdk\jdk17</jdkHome>
    </configuration>
  </toolchain>

 

如果有其他版本的jdk,也可以添加进去。

 

网上有说需要修改maven配置目录下的conf\toolchains.xml文件,我没有修改,直接指定了toolchains的路径也编译通过。

 

3、重新编译打包:

 

需要指定打包时的jdk链路配置文件,在mvn命令行增加-t xxx.xml配置文件。这里是在当前目录下,所以使用用的是相对路径:

 

mvn clean package -t toolchains-sample-win.xml  -Dmaven.test.skip=true

 

(命令行中的-t参数是用于指定jdk版本链路的配置文件路径)

 

至此,配置修改过程基本完成,可以泡杯咖啡等待编译和打包完成了,编译时需要下载很多依赖包,可能需要较长时间。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics