首页 > 解决方案 > 如何引导构建 jdk?

问题描述

我正在尝试构建jdk-11+8以读取生成的java.nio.ByteBufferLinux 源代码。

我根据文档安装了所有依赖项,然后成功运行configure

但是,当我运行时make,我收到一个关于缺少 Java 包的奇怪错误,这看起来像是一个引导问题。

git clone https://github.com/openjdk/jdk.git 
pushd jdk
bash configure
...
The existing configuration has been successfully updated in
/home/ubuntu/Code/jdk/build/linux-x86_64-normal-server-release
using default settings.

Configuration summary:
* Debug level:    release
* HS debug level: product
* JDK variant:    normal
* JVM variants:   server
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
* Version string: 11-internal+0-adhoc.ubuntu.jdk (11-internal)

Tools summary:
* Boot JDK:       openjdk version "11.0.9.1" 2020-11-04 OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.18.04) OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.18.04, mixed mode, sharing)  (at /usr/lib/jvm/java-11-openjdk-amd64)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 8.4.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 8.4.0 (at /usr/bin/g++)

Build performance summary:
* Cores to use:   4
* Memory limit:   15854 MB

make clean
make

Building target 'default (exploded-image)' in configuration 'linux-x86_64-normal-server-release'
Warning: No mercurial configuration present and no .src-rev
Compiling 117 files for BUILD_java.compiler.interim
/home/ubuntu/Code/jdk/src/java.compiler/share/classes/javax/annotation/processing/Messager.java:28: error: package javax.annotation does not exist
import javax.annotation.*;
^
1 error
CompileInterimLangtools.gmk:86: recipe for target '/home/ubuntu/Code/jdk/build/linux-x86_64-normal-server-release/buildtools/interim_langtools_modules/java.compiler.interim/_the.BUILD_java.compiler.interim_batch' failed
make[3]: *** [/home/ubuntu/Code/jdk/build/linux-x86_64-normal-server-release/buildtools/interim_langtools_modules/java.compiler.interim/_the.BUILD_java.compiler.interim_batch] Error 1
make/Main.gmk:76: recipe for target 'interim-langtools' failed
make[2]: *** [interim-langtools] Error 2
make[2]: *** Waiting for unfinished jobs....

我错过了什么?

更多系统细节:

ubuntu@box:~$ uname -a
Linux box 4.15.0-1057-aws #59-Ubuntu SMP Wed Dec 4 10:02:00 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@box:~$ cat /etc/issue
Ubuntu 18.04.4 LTS \n \l

再挖掘一点,我还看到以下错误,可能相关也可能不相关:

ubuntu@ip-172-31-40-153:~/Code/jdk$ make -n gensrc > /tmp/X
make[3]: *** No rule to make target '/home/ubuntu/Code/jdk/build/linux-x86_64-normal-server-release/buildtools/jdk_tools_classes/_the.BUILD_TOOLS_JDK_batch', needed by '/home/ubuntu/Code/jdk/build/linux-x86_64-normal-server-release/support/gensrc/java.logging/_the.COMPILE_PROPERTIES.marker'.  Stop.
make[2]: *** [java.logging-gensrc-src] Error 2
make[2]: *** Waiting for unfinished jobs....
make[3]: *** No rule to make target '/home/ubuntu/Code/jdk/build/linux-x86_64-normal-server-release/buildtools/jdk_tools_classes/_the.BUILD_TOOLS_JDK_batch', needed by '/home/ubuntu/Code/jdk/build/linux-x86_64-normal-server-release/support/gensrc/jdk.charsets/sun/nio/cs/ext/_the.charsetmapping-extcs'.  Stop.
make[2]: *** [jdk.charsets-gensrc-src] Error 2
make[3]: *** No rule to make target '/home/ubuntu/Code/jdk/build/linux-x86_64-normal-server-release/buildtools/jdk_tools_classes/_the.BUILD_TOOLS_JDK_batch', needed by '/home/ubuntu/Code/jdk/build/linux-x86_64-normal-server-release/support/gensrc/java.base/sun/util/cldr/CLDRBaseLocaleDataMetaInfo.java'.  Stop.
make[2]: *** [java.base-gensrc-src] Error 2
vmake[1]: *** [main] Error 2
make: *** [gensrc] Error 2

标签: javalinuxopenjdk-11

解决方案


事实证明,我使用 JDK 11 作为引导 JDK,这不起作用,因为该javax.annotations软件包已从JDK 11 中删除。

手动降级到 jdk 10 并指向configure它为我解决了这个问题。

wget https://download.java.net/java/GA/jdk10/10.0.2/19aef61b38124481863b1413dce1855f/13/openjdk-10.0.2_linux-x64_bin.tar.gz
tar xf openjdk-10.0.2_linux-x64_bin.tar.gz

bash configure --with-boot-jdk=/home/ubuntu/Code/jdk10/jdk-10.0.2
make

由于jdk 10已弃用,我不得不从存档中提取链接。


推荐阅读