<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OnlyLonely &#38; Marshall's &#187; OpenJDK</title>
	<atom:link href="http://www.onlymarshall.com/category/technical/openjdk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.onlymarshall.com</link>
	<description>小白和小黑</description>
	<lastBuildDate>Mon, 23 Apr 2012 15:58:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>OpenJDK6 build小记(Ubuntu 9.10)</title>
		<link>http://www.onlymarshall.com/2009/11/16/notes-about-building-openjdk6/</link>
		<comments>http://www.onlymarshall.com/2009/11/16/notes-about-building-openjdk6/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 10:28:08 +0000</pubDate>
		<dc:creator>marshall</dc:creator>
				<category><![CDATA[OpenJDK]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://www.onlymarshall.com/?p=681</guid>
		<description><![CDATA[之前在twitter上喊喊要研究JVM，今天算是迈出了第一步，从源代码编译openjdk。openjdk现在有6和7两个版本下载，现在7还在milestone 6的阶段，也暂时没什么需要尝试的新特性，另外openjdk6的代码大小只有openjdk7的一半（近50M对114M）,于是选择了openjdk6来进行构建。另外，jdk6提供官方下载，这样也方便了和官方版本进行对比。 事实上，根据官方的描述，openjdk6的代码是基于jdk7 b20和jdk6的update的，openjdk7的代码是基于jdk7 b10，很奇怪的代码来源。因为sun是在jdk6开发的晚期才宣布java的开源，于是先开源了java7成为openjdk7，然后再发布了jdk6之后才重新整理代码，从jdk7 b20里剔除了java7特性的代码，发布了openjdk6。现在jdk7的概念等同于openjdk7，但jdk6却和openjdk6不是一个东西。 openjdk的主页的左边栏有众多的链接，主要分为Groups和Projects，似乎是有一些工作组从事不同的项目。不少栏目里都有很多有用的资料，有兴趣的可以看看。其中有一个Build的工作组，负责构建工作，里面有关于构建的官方指南。 代码的下载可以用Mecurial来下，也可以下打好的bundle，应该大部分人会选择后者，Mecurial毕竟还是小众的版本配置工具，需要python。 代码构建的过程基本是按照官方指南一步步来的。我的构建环境是虚拟机中的Ubuntu 9.10（BS一下自己，硬盘上就有早就装好的Ubuntu 8.10，只是因为懒得离开Windows）。除了Linux平台，openjdk6还支持在Solaris和Windows上的构建。Linux使用gcc(4.2)编译，Windows使用VS2003（也有2005成功的例子，。而openjdk7的构建文档直接要求VS2008）。GNU make是构建工具，所以Windows下还需要cygwin。 构建的依赖在ubuntu下很简单，用下面的语句搞定。在9.10下需要下载很多东西，最大的是llvm的binary和开发包，不知是用来做编译还是虚拟机的。 sudo aptitude build-dep openjdk-6 另外需要安装openjdk6当作bootstrap jdk，还需要libmotif开发包 sudo aptitude install openjdk-6-jdk libmotif-dev 接着，设置一下环境变量 export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk 然后直接在源代码的目录下运行: make all 就开始构建openjdk6了。昨天我没好好看文档，自己去设定了motif, binary plugs, freetype的环境。还在错误的目录下运行了make，因为在子目录下make是部分构建，所以一直报错，找不到ALT_JDK_IMPORT_PATH。最后也还是自己折腾好了，但不知道是ubuntu早就下好了依赖，还是自己设置好的。 构建完成后，可以自己运行代码目录下build/linux-i586/bin下的可执行程序，比如java 这个时候版本号成了 ./java -version openjdk version &#8220;1.6.0-internal&#8221; OpenJDK Runtime Environment (build 1.6.0-internal-marshall_15_nov_2009_21_53-b00) OpenJDK Client VM (build 14.0-b16, mixed mode) 对比原有的信息： [...]]]></description>
			<content:encoded><![CDATA[<p>之前在twitter上喊喊要研究JVM，今天算是迈出了第一步，从源代码编译<a href="http://openjdk.java.net/">openjdk</a>。openjdk现在有6和7两个版本下载，现在7还在milestone 6的阶段，也暂时没什么需要尝试的新特性，另外openjdk6的代码大小只有openjdk7的一半（近50M对114M）,于是选择了openjdk6来进行构建。另外，jdk6提供官方下载，这样也方便了和官方版本进行对比。</p>
<p>事实上，<a href="http://openjdk.java.net/projects/jdk6/">根据官方的描述</a>，openjdk6的代码是基于jdk7 b20和jdk6的update的，openjdk7的代码是基于jdk7 b10，很奇怪的代码来源。因为sun是在jdk6开发的晚期才宣布java的开源，于是先开源了java7成为openjdk7，然后再发布了jdk6之后才重新整理代码，从jdk7 b20里剔除了java7特性的代码，发布了openjdk6。现在jdk7的概念等同于openjdk7，但jdk6却和openjdk6不是一个东西。</p>
<p>openjdk的主页的左边栏有众多的链接，主要分为Groups和Projects，似乎是有一些工作组从事不同的项目。不少栏目里都有很多有用的资料，有兴趣的可以看看。其中有一个Build的工作组，负责构建工作，里面有<a href="http://hg.openjdk.java.net/jdk6/jdk6/raw-file/tip/README-builds.html">关于构建的官方指南</a>。</p>
<p>代码的下载可以用Mecurial来下，也可以下打好的bundle，应该大部分人会选择后者，Mecurial毕竟还是小众的版本配置工具，需要python。</p>
<p>代码构建的过程基本是按照<a href="http://hg.openjdk.java.net/jdk6/jdk6/raw-file/tip/README-builds.html">官方指南</a>一步步来的。我的构建环境是虚拟机中的Ubuntu 9.10（BS一下自己，硬盘上就有早就装好的Ubuntu 8.10，只是因为懒得离开Windows）。除了Linux平台，openjdk6还支持在Solaris和Windows上的构建。Linux使用gcc(4.2)编译，Windows使用VS2003（也有<a href="http://leejingbo.javaeye.com/blog/35318">2005成功的例子</a>，。而openjdk7的构建文档直接要求VS2008）。GNU make是构建工具，所以Windows下还需要cygwin。</p>
<p>构建的依赖在ubuntu下很简单，用下面的语句搞定。在9.10下需要下载很多东西，最大的是llvm的binary和开发包，不知是用来做编译还是虚拟机的。</p>
<blockquote><p>sudo aptitude build-dep openjdk-6</p></blockquote>
<p>另外需要安装openjdk6当作bootstrap jdk，还需要libmotif开发包</p>
<blockquote><p>sudo aptitude install openjdk-6-jdk libmotif-dev</p></blockquote>
<p>接着，设置一下环境变量</p>
<blockquote><p>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</p></blockquote>
<p>然后直接在源代码的目录下运行:</p>
<blockquote><p>make all</p></blockquote>
<p>就开始构建openjdk6了。昨天我没好好看文档，自己去<a href="http://hg.openjdk.java.net/jdk6/jdk6/raw-file/tip/README-builds.html#linux">设定了motif, binary plugs, freetype的环境</a>。还在错误的目录下运行了make，因为在子目录下make是部分构建，所以一直报错，找不到<a href="http://hg.openjdk.java.net/jdk6/jdk6/raw-file/tip/README-builds.html#ALT_JDK_IMPORT_PATH">ALT_JDK_IMPORT_PATH</a>。最后也还是自己折腾好了，但不知道是ubuntu早就下好了依赖，还是自己设置好的。</p>
<p>构建完成后，可以自己运行代码目录下build/linux-i586/bin下的可执行程序，比如java</p>
<p>这个时候版本号成了</p>
<blockquote><p>./java -version</p>
<p>openjdk version &#8220;1.6.0-internal&#8221;</p>
<p>OpenJDK Runtime Environment (build 1.6.0-internal-marshall_15_nov_2009_21_53-b00)</p>
<p>OpenJDK Client VM (build 14.0-b16, mixed mode)</p></blockquote>
<p>对比原有的信息：</p>
<blockquote><p>java -version</p>
<p><span style="background-color: #ffffff;">java version &#8220;1.6.0_0&#8243;</span></p>
<p>OpenJDK Runtime Environment (IcedTea6 1.6.1) (6b16-1.6.1-3ubuntu1)</p>
<p>OpenJDK Client VM (build 14.0-b16, mixed mode, sharing)</p></blockquote>
<div>另：在我分配了512M内存的ubuntu上，编译时间大致为1个小时。构建有警告提示内存太少，会影响速度。明天放到非虚拟的ubuntu下跑试试看。</div>
]]></content:encoded>
			<wfw:commentRss>http://www.onlymarshall.com/2009/11/16/notes-about-building-openjdk6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<br />
<b>Warning</b>:  fsockopen() has been disabled for security reasons in <b>/home/onlymars/public_html/wp/wp-includes/class-snoopy.php</b> on line <b>1148</b><br />

