Compiler construction 如何重新编译Java运行时环境(JRE)?

Compiler construction 如何重新编译Java运行时环境(JRE)?,compiler-construction,java,Compiler Construction,Java,我想这很容易。我下载了JDK,解压缩了src.zip,修改了JDK以满足我的需要,并保存了文件 现在,我需要做的唯一一件事就是将提取的src文件夹重新编译并更新为“JRE”。我尝试使用javac,但没有成功。例如,我得到的错误是没有提供源文件。我显然没有使用正确的语法来编译JRE 那么,有谁能告诉我,如何最终得到一个工作的“JRE”文件夹,其中包含一个基于从JDK提取的新源文件夹的修改过的Java运行时环境 注意:我不打算重新发布编译。仅供个人自用 更新:由于一个答案,我得到了以下命令:“c:\

我想这很容易。我下载了JDK,解压缩了src.zip,修改了JDK以满足我的需要,并保存了文件

现在,我需要做的唯一一件事就是将提取的src文件夹重新编译并更新为“JRE”。我尝试使用javac,但没有成功。例如,我得到的错误是没有提供源文件。我显然没有使用正确的语法来编译JRE

那么,有谁能告诉我,如何最终得到一个工作的“JRE”文件夹,其中包含一个基于从JDK提取的新源文件夹的修改过的Java运行时环境

注意:我不打算重新发布编译。仅供个人自用

更新:由于一个答案,我得到了以下命令:
“c:\tmp\jdk1.6.0_17\bin\javac”-classpath“c:\tmp\out”-verbose-g-d“c:\tmp\out”-J-Xmx512m-cp“c:\jdk1.6.0_17\jre\lib\rt.jar”;“c:\jdk1.6.0_17\lib\tools.jar”@files.txt
-不幸的是,虽然它似乎在处理事情,但完成后输出文件夹/out是空的。我的命令有问题吗

提前感谢。

根据:

Java技术限制。您不得创建、修改或更改sun在任何命名约定指定中指定为“java”、“javax”、“sun”或类似约定的类、接口或子包的行为,也不得授权您的被许可方创建、修改或更改此类类、接口或子包的行为

换句话说,不允许以任何形式重新分发JVM的修改副本。如果您想这样做,您需要联系Sun以获得许可

编辑:@Tom Hawtin是对的;这只适用于Sun的官方“普通”JRE,即最终用户在其计算机上安装的一个

例如,我得到的错误是没有提供源文件


您必须告诉javac您要编译的每个.java文件。javac告诉您没有为它提供任何要编译的文件。

将您的类路径设置为extract source目录的顶部。编译这些文件,然后将它们的.class文件放回rt.jar。

仅考虑随附的源代码,您将无法编译整个Sun/Oracle JDK,因为这些类中的许多类在内部使用像
com.Sun.
这样的包中的专有类,当然,本地方法——这些方法的源代码不包括在JDK中。你必须通过一个特殊的或是使用OpenJDK来获取它们(我不知道让原生的东西工作起来是琐碎的还是痛苦的)。或者,也可以只选择性地重新编译特定的类——当然,只有当您没有以与JDK中现有用法不兼容的方式更改它们时,才可以进行编译。

以防万一,您可以按照它们的或进行编译 使用(它们还提供在不使用IcedTea线束的情况下构建OpenJDK)。

而不是

"c:\tmp\jdk1.6.0_17\bin\javac" -classpath "c:\tmp\out" -verbose -g -d "c:\tmp\out" -J-Xmx512m -cp 
请尝试以下操作:

set path=C:\tmp\jdk1.6.0_17\bin
点击你电脑上的回车键,然后点击以下内容

C:\tmp>set classpath=.
再次按下电脑键盘上的返回键 然后进行编译

C:\tmp>javac YourProgramName.java
运行您的程序

C:\tmp>java YourProgramName

除非是OpenJDK。还有JRL和JIUL许可证。这不会是一个问题,因为我不会重新发布编译。更新了我的问题以反映这一点。很有趣。然而,我不知道如何结束与工作的JRE现在。例如,如果我修改了String.java文件,我将如何得到一个能反映对String.java的更改的JRE文件夹?根据您的建议,我得到了以下命令:“c:\tmp\jdk1.6.0_17\bin\javac”-classpath“c:\tmp\out”-verbose-g-d“c:\tmp\out”-J-Xmx512m-cp“c:\jdk1.6.0_17\JRE\lib\rt.jar”;“c:\jdk1.6.0_17\lib\tools.jar”@files.txt-不幸的是,虽然它似乎在处理事情,但完成时输出文件夹/输出是空的。我的命令有问题吗?