`

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版本链路的配置文件路径)

 

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

 

分享到:
评论

相关推荐

    Log4qt 1.4.2版本 qt专用, qt在windows上用不了log4cplus

    1.4.2版本是Log4Qt的一个稳定版本,旨在提供可靠且灵活的日志记录解决方案,尤其对于那些在Windows平台上运行的Qt应用来说,由于log4cplus可能不兼容或不便使用,Log4Qt成为了一个理想的选择。 **Log4Qt的核心组件*...

    QFtp 编译报错 使用了未定义类型“QFtpPrivate”的方法

    在使用Qt库进行FTP文件传输时,可能会遇到一个常见的错误,即"使用了未定义类型“QFtpPrivate”的方法"。这个错误通常出现在尝试编译QFtp类相关的代码时,QFtp是Qt库中用于FTP文件传输的一个组件。在深入探讨这个...

    JSON.stringify()报错:JSON未定义

    标题中的“JSON.stringify()报错:JSON未定义”是一个常见的JavaScript错误,通常出现在尝试使用`JSON.stringify()`方法但全局环境中没有定义JSON对象时。在浏览器环境中,JSON是默认支持的,但在某些旧版本的IE...

    log4cxx + apr + apr-util (linux) 安装使用

    log4cxx是apache的一款优秀的日志文件记录工具,然而,下载能够编译成功的,即log4cxx + apr + apr-util 能够兼容,编译通过的。当时就因为下载的不能够兼容,费了好的的功夫,现在把他们上传上来,供后来人使用

    NXP codewarrior 编译报错解析合集 Build Tools Message Reference

    在实际应用中,当开发者遇到编译报错时,可以参考Build Tools Message Reference来理解错误的根源。例如,如果报错代码是10100,那么开发者应检查代码中是否存在未定义的标识符,或者是否遗漏了必要的#include指令。...

    iccavr编译putchar未定义时解决方案.pdf

    ### iccavr编译putchar未定义问题及解决方案 #### 一、问题背景与原因分析 在使用ICC AVR编译器进行嵌入式系统开发的过程中,可能会遇到编译时提示`undefined symbol '_putchar'`的错误。这个问题通常出现在尝试在...

    VC6.0到VS2017编译报错解决办法.docx

    ### VC6.0到VS2017编译报错解决办法 #### 一、概述 随着软件开发工具的不断进步,Visual Studio (VS) 的版本也在不断更新,从早期的 Visual C++ 6.0 (简称VC6.0) 发展到 VS2017,开发环境和编译器的功能得到了显著...

    完美解决IE9浏览器出现的对象未定义问题

    在本文中,我们将深入探讨如何完美解决在Internet Explorer 9(IE9)浏览器中遇到的“对象未定义”错误。这种问题通常是由于浏览器的兼容性问题、JavaScript代码执行顺序、或者资源加载顺序不当所引起的。以下是一些...

    在vs2010中编译log4cxx详细方法

    在Visual Studio 2010中编译log4cxx的日志框架涉及到一系列详细的步骤,包括下载源码、解压缩、重命名文件夹、配置环境、修改源代码以及编译等环节。log4cxx是一个基于Java的log4j库的C++版本,用于在C++应用程序中...

    比较全的汇编编译报错信息

    然而,编写汇编代码时,由于其语法的严格性和精确性,常常会遇到各种编译错误。本篇文章将深入探讨"Unknown type specifier"和"Symbol not defined"这两种常见的汇编编译错误,以及如何解决它们。 **未知类型指定器...

    vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题

    2. 避免在数据初始化之前操作DOM元素:在Vue的生命周期中,data属性在创建实例之前是未定义的。因此,我们在实例化Vue之前或在data属性初始化之前不应尝试访问或操作绑定在该属性上的DOM元素。如果需要在页面加载时...

    iccavr编译putchar未定义时解决方案实用.pdf

    ### ICCAVR 编译器中 putchar() 未定义问题详解及解决方案 #### 一、问题背景 在使用 ICCAVR 编译器进行 AVR 单片机编程时,经常遇到 `_putchar` 符号未定义的问题。该问题通常出现在尝试在程序中使用 `putchar()`...

    json2.js json未定义的解决方案!

    本文将深入探讨在使用json2.js时遇到"json未定义"错误的解决方案,以及如何正确使用json.parse方法。 首先,"json未定义"的错误通常发生在尝试调用JSON对象的函数,如`json.parse()`或`json.stringify()`时,但JSON...

    单例模式中声明静态自己类型的指针编译显示未定义处理

    单例模式是软件设计模式中的一种,用于控制类的...通过以上方法,你可以有效地解决在实现单例模式时遇到的“未定义的引用”错误。同时,记得根据项目需求和语言版本选择合适的单例实现方式,以确保程序的正确性和性能。

    QUARTUS II 编译报错top level design entity “...” is undefined

    解决这个问题需要遵循一定的步骤,下面将详细解释如何处理这一编译错误。 首先,理解错误原因。当你收到“top level design entity”未定义的错误时,这通常是因为QUARTUS II无法找到你的项目中指定的顶级模块。这...

    解决'JSON'未定义 报错,引入json2.js

    将JavaScript对象类型的参数通过JSON.stringify转换成字符串传递时,IE5、6、7、8会报:“JSON”未定义 的错误。可以通过在html文件或者Jsp文件的head头内引入json2.js文件来解决,需要先下载json2.js,目前已经使用...

    v5编译器,解决keil5.38compiler报错

    在使用Keil uVision v5编译器时,有时可能会遇到各种报错情况,这通常是由于配置不当、代码错误或编译器版本问题引起的。针对"v5编译器,解决keil5.38compiler报错"这个主题,我们可以深入探讨如何识别和解决这些问题...

    光绘导入CAM350报错问题的解决方法.doc

    光绘导入CAM350报错问题的解决方法.doc

    Codewarrior编译出现的错误以及解决方法

    文档《单片机技术初步实践》提供了有关Codewarrior在编译过程中可能遇到的C语言语法错误及其解决方法。以下是针对文档中列出的具体错误及其解决方法的详细说明。 1. C1000错误:非法的标识符列表出现在声明中 描述...

    qt5版本log4qt

    Log4Qt是针对Qt5设计的日志记录库,它是Apache Log4j的Qt版本,为Qt应用程序提供了灵活且功能强大的日志处理机制。 在Qt5中,尽管可以使用内置的`qDebug()`等宏进行简单的日志输出,但当面临复杂日志管理需求时,如...

Global site tag (gtag.js) - Google Analytics