Java8JDK源代码用javac命令行编译器编译
Compilation of the Java 8 JDK source code with javac command line compiler
请问如何使用 Javac 编译带有调试信息的 JDK 源文件。
我正在使用以下命令:
javac -J-Xms16m -J-Xmx1024m -source 8 -target 8 -sourcepath d:\jdk_src
-classpath ".:rt.jar:javax-crypto.jar:ui.jar" -bootclasspath ".:rt.jar:javax-crypto.jar:ui.jar" -d "jdk_debug" -g @filelist.txt >>
log.txt 2>&1
重现步骤:
- 源和目标版本是 Java 8
- sourcepath 包含所有 java 类 的目录(从 JDK/ 中找到的 src.zip 中提取)
- rt.jar 可在 JDK_HOME\jre\lib 中找到,并包含编译源代码所需的 类
- filelist.txt 包含必须编译的 src.zip 文件中找到的所有 类(使用命令
dir /B /S /X jdk_src\*.java > filelist.txt
提取)
- 我们正在 log.txt
中输出日志
没有成功编译 类,而是出现了如下错误:
\jdk\jdk_src\java\lang\reflect\AccessibleObject.java:29: error: package sun.reflect does not exist import sun.reflect.Reflection;
\jdk\jdk_src\java\lang\reflect\AccessibleObject.java:30: error: package sun.reflect does not exist import sun.reflect.ReflectionFactory;
\jdk\jdk_src\java\util\jar\Attributes.java:37: error: package >sun.util.logging does not exist
这些包存在于提供的 jar 中(rt.jar、ui.jar 和 javax-crypto.jar)。您能解释一下为什么源代码没有被编译,因为类路径文件已提供给编译器吗?
如有任何反馈,我们将不胜感激。
谢谢。
Java 源代码并非设计为以这种方式构建。应该做的是检查 OpenJDK 源代码树并按照源代码树中的构建说明进行操作。您应该能够调整构建脚本以使用调试信息进行编译...并直接使用构建的“rt.jar”或从构建工件中提取您需要的类。
您可以从 Github 获得 Java 8 源代码:https://github.com/openjdk/jdk8u。 (附近有其他版本...) Select git 标签对应于您要构建的 Java 版本。构建说明的链接在 README.md
文件中。
当您按照您的方式进行编译时,编译失败的原因并不完全清楚。但是,javac
编译器实施了一些限制,旨在阻止您针对“rt.jar”中的内部 API 编译普通应用程序代码。您正在编译的某些“src.zip”代码(legitimately)取决于内部 API。
请问如何使用 Javac 编译带有调试信息的 JDK 源文件。
我正在使用以下命令:
javac -J-Xms16m -J-Xmx1024m -source 8 -target 8 -sourcepath d:\jdk_src -classpath ".:rt.jar:javax-crypto.jar:ui.jar" -bootclasspath ".:rt.jar:javax-crypto.jar:ui.jar" -d "jdk_debug" -g @filelist.txt >> log.txt 2>&1
重现步骤:
- 源和目标版本是 Java 8
- sourcepath 包含所有 java 类 的目录(从 JDK/ 中找到的 src.zip 中提取)
- rt.jar 可在 JDK_HOME\jre\lib 中找到,并包含编译源代码所需的 类
- filelist.txt 包含必须编译的 src.zip 文件中找到的所有 类(使用命令
dir /B /S /X jdk_src\*.java > filelist.txt
提取)
- 我们正在 log.txt 中输出日志
没有成功编译 类,而是出现了如下错误:
\jdk\jdk_src\java\lang\reflect\AccessibleObject.java:29: error: package sun.reflect does not exist import sun.reflect.Reflection;
\jdk\jdk_src\java\lang\reflect\AccessibleObject.java:30: error: package sun.reflect does not exist import sun.reflect.ReflectionFactory;
\jdk\jdk_src\java\util\jar\Attributes.java:37: error: package >sun.util.logging does not exist
这些包存在于提供的 jar 中(rt.jar、ui.jar 和 javax-crypto.jar)。您能解释一下为什么源代码没有被编译,因为类路径文件已提供给编译器吗?
如有任何反馈,我们将不胜感激。
谢谢。
Java 源代码并非设计为以这种方式构建。应该做的是检查 OpenJDK 源代码树并按照源代码树中的构建说明进行操作。您应该能够调整构建脚本以使用调试信息进行编译...并直接使用构建的“rt.jar”或从构建工件中提取您需要的类。
您可以从 Github 获得 Java 8 源代码:https://github.com/openjdk/jdk8u。 (附近有其他版本...) Select git 标签对应于您要构建的 Java 版本。构建说明的链接在 README.md
文件中。
当您按照您的方式进行编译时,编译失败的原因并不完全清楚。但是,javac
编译器实施了一些限制,旨在阻止您针对“rt.jar”中的内部 API 编译普通应用程序代码。您正在编译的某些“src.zip”代码(legitimately)取决于内部 API。