【问题标题】:How to configure openJDK11 for build from sources?如何配置 openJDK11 以从源代码构建?
【发布时间】:2021-12-16 22:06:03
【问题描述】:

我需要从源代码交叉编译这个 OpenJava fork https://gitlab.com/gosjava/11/openjdk/-/tree/master/ - 对于 aarch64-linux-gnu devkit 目标: 为此,我安装了 java 10.0.2 作为主机 JDK,然后运行“./configure”

└─$ ./configure    
...
configure: Potential Boot JDK found at /home/katya/java is incorrect JDK version (Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true); ignoring
configure: (Your Boot JDK version must be one of: 10 11)
checking for javac... /home/katya/java/bin/javac
checking for java... /home/katya/java/bin/java
configure: Found potential Boot JDK using java(c) in PATH
configure: Potential Boot JDK found at /home/katya/java is incorrect JDK version (Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true); ignoring
configure: (Your Boot JDK version must be one of: 10 11)
configure: Could not find a valid Boot JDK. You might be able to fix this by running 'sudo apt-get install openjdk-8-jdk'.
configure: This might be fixed by explicitly setting --with-boot-jdk
configure: error: Cannot continue
configure exiting with result code 1

这里有完整的日志https://gist.github.com/iva-nova-e-katerina/3061b865beb48dc25594bc360508d6a3 你能告诉我为什么配置说我使用了错误的JDK吗?

【问题讨论】:

  • /home/katya/java/bin/java -version 输出什么?
  • @StephenC java版本“10.0.2”2018-07-17

标签: java java-11 openjdk-11


【解决方案1】:

该消息由BOOTJDK_DO_CHECK autoconf 宏生成,其定义在“jdk11u/make/autoconf/boot-jdk.m4”中。如果您查看该文件,您将看到以下内容:

      BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $HEAD -n 1`

      # Extra M4 quote needed to protect [] in grep expression.
      [FOUND_CORRECT_VERSION=`$ECHO $BOOT_JDK_VERSION \
          | $EGREP "\"(${DEFAULT_ACCEPTABLE_BOOT_VERSIONS// /|})([\.+-].*)?\""`]
      if test "x$FOUND_CORRECT_VERSION" = x; then
        AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK is incorrect
                       JDK version ($BOOT_JDK_VERSION); ignoring])
        AC_MSG_NOTICE([(Your Boot JDK version must be one of:
                       $DEFAULT_ACCEPTABLE_BOOT_VERSIONS)])
        BOOT_JDK_FOUND=no

(为了便于阅读,我添加了几个换行符...)

如果我们将此与实际的错误消息进行比较:

configure: Potential Boot JDK found at /home/katya/java is incorrect JDK version 
(Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true); 
ignoring

所以...它看起来像:

  1. 您已经(或某些东西)在运行configure 时生效的环境中设置了_JAVA_OPTIONS 环境变量。
  2. java 命令警告您_JAVA_OPTIONS 有效(出于安全原因!)。大概是真正的版本字符串作为下一行输出。
  3. 该宏仅捕获第一行 (head -n 1) ... 然后将警告消息用作真实版本字符串。
  4. 此伪造版本会导致 Boot Java 版本检查逻辑失败。

您可能有一个有效的 Boot JDK ...但 configure 被警告消息弄糊涂了,并认为您没有。

可能的解决方案:

  • 只需取消设置_JAVA_OPTIONS。这些选项看起来与您正在做的事情无关。

  • 如果与构建相关,请在运行 configure 时取消设置 _JAVA_OPTIONS。然后重新设置。

  • 如果由于某些原因无法取消设置_JAVA_OPTIONS,您可以修改上述“.m4”文件以跳过版本检查。 (呃……)


您可以阅读更多关于_JAVA_OPTIONS 的这种不需要的(尽管实际上是必要的)行为:

(简短的回答是“你不能”......除了取消设置环境变量。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 2021-10-07
    • 2012-01-21
    • 2012-06-13
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多