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

时间:2010-03-04 20:16:59

标签: compiler-construction java

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

现在,我唯一需要做的就是将提取的和更新的src文件夹重新编译为“JRE”。我尝试使用javac,但没有到达任何地方。例如,我收到的错误是没有给出源文件。我很明显没有使用正确的语法来编译JRE。

那么,任何人都可以告诉我,你如何最终得到一个工作的“JRE”文件夹,其中包含一个基于从JDK中提取的新源文件夹的修改过的Java Runtime Environment?

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

更新:感谢答案和http://www.javalobby.org/java/forums/t103334.html我得到了以下命令:"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为空。我的命令有问题吗?

提前致谢。

6 个答案:

答案 0 :(得分:2)

将类路径设置为数据提取源目录的顶部。编译文件,然后将他们的.class文件放回rt.jar。

答案 1 :(得分:2)

您将无法仅根据其提供的源编译整个Sun / Oracle JDK,因为其中许多类在内部使用com.sun.*等包中的专有类,当然还有本机方法 - 以及JDK中不包含这些方法的来源。你必须通过一个特殊的source code release或者使用OpenJDK来获取它们(我不知道让原生的东西工作是微不足道的还是令人难以忍受的)。或者,也许可以选择性地重新编译特定的类 - 但是当然只有当你不改变它们的方式使它们与JDK中的现有用法不兼容时。

答案 2 :(得分:1)

  
    
      

例如,我收到的错误是没有给出源文件。

    
  

你必须告诉javac你要编译的每个.java文件。 javac告诉你,你没有提供任何文件供它编译。<​​/ p>

答案 3 :(得分:1)

以防万一,您可以在OpenJDKinstructions之后编译IcedTea 使用guidance(他们还提供{{3}}来构建没有IcedTea线束的OpenJDK。)

答案 4 :(得分:0)

根据Sun's license

  

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

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

编辑: @Tom Hawtin是对的;这仅适用于Sun官方的“vanilla”JRE,即最终用户已安装在他们的计算机上。

答案 5 :(得分:0)

而不是

"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