java - 如何引导构建 jdk?
问题描述
我正在尝试构建jdk-11+8
以读取生成的java.nio.ByteBuffer
Linux 源代码。
我根据文档安装了所有依赖项,然后成功运行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
解决方案
事实证明,我使用 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
已弃用,我不得不从存档中提取链接。
推荐阅读
- python - Flask-session TypeError:“NoneType”和“datetime.datetime”的实例之间不支持“<=”
- postgresql - CREATE MATERIALIZED VIEW 不适用于 macOS Mojave
- google-cloud-platform - Google Cloud Tasks 执行后会自行删除吗?
- javascript - 用于导出的 jQuery DataTables 格式输出,排除按钮
- node.js - 使用 promise 等待 http post 结束
- regex - python / ansible中的正则表达式
- excel - Boto3 获取所有具有 ebs 卷 id 的 ec2 实例的列表,大小为 excel
- javascript - 如何在数组中找到两个最大数(负数和正数)?
- javascript - node-postgres 如何为插入查询参数化动态字符串数组?
- javascript - 为什么 React-Native 不显示 Axios 获取的数据?