glfs/general/prog/jdk.xml

573 lines
20 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../../general.ent">
%general-entities;
<!ENTITY jdk-download-source "http://java.sun.com/j2se/jrl_download.html">
<!ENTITY jdk-download-binary "http://java.sun.com/j2se/1.5.0/download.jsp">
<!ENTITY jdk-source-md5sum "http://anduin.linuxfromscratch.org/sources/BLFS/SVN/I-K/jdk/jdk-&jdk-src-version;.md5sums">
<!ENTITY jdk-bin-md5sum "562d9797af801bfbe2b5e44417d8ccc4">
<!ENTITY jdk-bin-size "45 MB">
<!ENTITY jdk-src-size "65.7 MB (three .zip files)">
<!ENTITY jdk-src-buildsize "1444 MB">
<!ENTITY jdk-time "33.06 SBU">
]>
<sect1 id="jdk" xreflabel="JDK-&jdk-src-version;">
<sect1info>
<othername>$LastChangedBy$</othername>
<date>$Date$</date>
</sect1info>
<?dbhtml filename="jdk.html" ?>
<title><application>JDK</application>-&jdk-src-version;</title>
<indexterm zone="jdk">
<primary sortas="a-JDK">JDK</primary>
</indexterm>
<sect2>
<title>Introduction to
<application>JDK</application></title>
<para>The <application>JDK</application> package contains
Sun's <application>Java</application> development environment. This is useful
for developing <application>Java</application> programs and provides the
runtime environment necessary to run <application>Java</application> programs.
It also includes a plug-in for browsers so that they can be
<application>Java</application> aware.</para>
<para>The <acronym>JDK</acronym> comes in two flavors, a precompiled binary
and a source package. Previously, the plugin included in the
<acronym>JDK</acronym> binary package was unusable on <acronym>LFS</acronym>
owing to incompatibilities with <acronym>GCC</acronym>-3 compiled browsers.
This is not the case anymore.</para>
<para>In order to use the source code and patches, you must read and agree
to the Sun <ulink url="http://java.sun.com/j2se/1.5.0/jrl_5.0-license.txt">
Java Research License</ulink>. In addition, the source code cannot be
downloaded from some countries, so for users from those countries, the binary
is the only option.</para>
<para>If you plan on compiling the <acronym>JDK</acronym> source, you
will still need to download the binary version to bootstrap the
<acronym>JDK</acronym> build. You will need to download a total of four
files to complete the source build:
<filename>jdk-1_5_0_02-linux-i586.bin</filename>;
<filename>jdk-1_5_0-src-jrl.zip</filename>;
<filename>jdk-1_5_0-bin-jrl.zip</filename>;
and <filename>jdk-1_5_0-mozilla_headers-unix.zip</filename>.</para>
<sect3><title>Package information</title>
<itemizedlist spacing='compact'>
<listitem><para>Binary download:
<ulink url="&jdk-download-binary;"/></para></listitem>
<listitem><para>Version used (binary):
&jdk-bin-version;</para></listitem>
<listitem><para>Download MD5 sum (binary):
&jdk-bin-md5sum;</para></listitem>
<listitem><para>Source download:
<ulink url="&jdk-download-source;"/></para></listitem>
<listitem><para>Download MD5 sum (source):
<ulink url="&jdk-source-md5sum;"/></para></listitem>
<listitem><para>Download size (binary):
&jdk-bin-size;</para></listitem>
<listitem><para>Download size (source):
&jdk-src-size;</para></listitem>
<listitem><para>Estimated disk space required:
&jdk-src-buildsize;</para></listitem>
<listitem><para>Estimated build time:
&jdk-time;</para></listitem></itemizedlist>
</sect3>
<sect3><title>Required Patches</title>
<itemizedlist spacing='compact'>
<listitem><para><ulink
url="&patch-root;/jdk-&jdk-src-version;-gcc_3.4.2+-3.patch"/></para>
</listitem>
<listitem><para><ulink
url="&patch-root;/jdk-&jdk-src-version;-motif_mkmsgcat-1.patch"/></para>
</listitem>
<listitem><para><ulink
url="&patch-root;/jdk-&jdk-src-version;-nptl-1.patch"/></para></listitem>
<listitem><para><ulink
url="&patch-root;/jdk-&jdk-src-version;-remove_broken_demo-1.patch"/></para>
</listitem>
<listitem><para><ulink
url="&patch-root;/jdk-&jdk-src-version;-remove_fixed_paths-1.patch"/></para>
</listitem>
</itemizedlist>
</sect3>
<sect3><title>Recommended Patches</title>
<itemizedlist spacing='compact'>
<listitem><para><ulink
url="&patch-root;/jdk-&jdk-src-version;-remove_debug_image-1.patch"/>
(Skips compiling of the <application>JDK</application> debug image)</para>
</listitem>
<listitem><para><ulink
url="&patch-root;/jdk-&jdk-src-version;-static_cxx-1.patch"/>
(Forces dynamic linking to gcc libs)</para></listitem>
<listitem><para><ulink
url="&patch-root;/jdk-&jdk-src-version;-xorg-6.8.1-1.patch"/>
(Only required if building agianst <xref linkend="xorg"/>)</para></listitem>
</itemizedlist>
</sect3>
<sect3><title><application>JDK</application> dependencies</title>
<sect4><title>Required (to build <application>JDK</application> from
source)</title>
<para>X (<xref linkend="xfree86"/> or <xref linkend="xorg"/>),
<xref linkend="zip"/>,
<xref linkend="unzip"/>,
<xref linkend="cpio"/>,
<xref linkend="alsa"/>, and
<xref linkend="tcsh"/></para>
</sect4>
</sect3>
</sect2>
<sect2>
<title>Installation of <application>JDK</application></title>
<para>Both versions will be installed in parallel. You may choose to keep
either or both.</para>
<para>Install the precompiled <acronym>JDK</acronym> with the
following commands:</para>
<screen><userinput><command>export VERSION=&jdk-bin-version; &amp;&amp;
export MV=`echo $VERSION | cut -d "_" -f 1,1` &amp;&amp;
export V=`echo ${VERSION} | sed -e "s/\./_/g"` &amp;&amp;
sed -i "s:^PATH=.*::" jdk-${V}-linux-i?86.bin &amp;&amp;
chmod +x jdk-${V}-linux-i?86.bin &amp;&amp;
mkdir -p bin &amp;&amp;
ln -sf /bin/true bin/more &amp;&amp;
yes | PATH=$PWD/bin:$PATH ./jdk-${V}-linux-i?86.bin &amp;&amp;
cd jdk${VERSION}</command></userinput></screen>
<para>Now, as the root user:</para>
<screen><userinput role='root'><command>install -d /opt/jdk/jdk-precompiled-${MV} &amp;&amp;
mv * /opt/jdk/jdk-precompiled-${MV}
chown -R root:root /opt/jdk/jdk-precompiled-${MV}</command></userinput></screen>
<para>The binary version is now installed.</para>
<para>If you don't want to compile the source or are not in a position to
download the source owing to license restrictions, skip ahead to the
configuration section.</para>
<para>Add the recently installed <acronym>JDK</acronym> to the path.</para>
<screen><userinput><command>export JAVA_HOME=/opt/jdk/jdk-precompiled-${MV} &amp;&amp;
export PATH=$PATH:${JAVA_HOME}/bin</command></userinput></screen>
<para>Unzip the sources:</para>
<screen><userinput><command>mkdir jdk-build &amp;&amp;
cd jdk-build &amp;&amp;
VERSION=&jdk-src-version; &amp;&amp;
V=`echo $VERSION | sed -e "s/\./_/g"` &amp;&amp;
unzip ../jdk-${V}-src-jrl.zip &amp;&amp;
unzip ../jdk-${V}-bin-jrl.zip &amp;&amp;
unzip ../jdk-${V}-mozilla_headers-unix.zip</command></userinput></screen>
<para>Apply all the patches downloaded above.</para>
<screen><userinput><command>for PATCH in ../jdk-&jdk-src-version;*.patch
do patch -Np1 -i ${PATCH}
done</command></userinput></screen>
<para>Set/unset some variables which affect the build:</para>
<screen><userinput><command>export ALT_BOOTDIR="$JAVA_HOME" &amp;&amp;
unset JAVA_HOME &amp;&amp;
unset CLASSPATH
unset CFLAGS
unset CXXFLAGS
unset LDFLAGS
export ALT_DEVTOOLS_PATH="/usr/bin" &amp;&amp;
export BUILD_NUMBER="blfs-&blfs-version;" &amp;&amp;
export DEV_ONLY=true &amp;&amp;
export ALT_MOZILLA_PATH=$PWD &amp;&amp;
export INSANE=true &amp;&amp;
export MAKE_VERBOSE=true &amp;&amp;
export ALT_CACERTS_FILE=${ALT_BOOTDIR}/jre/lib/security/cacerts</command></userinput></screen>
<warning><para>Setting CFLAGS/CXXFLAGS/LDFLAGS is guaranteed to make the build
fail. If you are interested in optimizing the build, set
OTHER_CFLAGS/OTHER_CXXFLAGS/OTHER_LDFLAGS instead.</para></warning>
<para>Additionally, if you would like to make in parallel, add the
following:</para>
<screen><userinput><command>export HOTSPOT_BUILD_JOBS=<replaceable>[3]</replaceable></command></userinput></screen>
<para>Build the <application>JDK</application> with the following
commands. There will be a lot of messages about missing files that look like
errors. These are caused by not meeting the expected build environemnt
(Red Hat). As long as the build doesn't stop, the messages
are harmless.</para>
<screen><userinput><command>cd control/make &amp;&amp;
make &amp;&amp;
cd ../build/linux-i?86</command></userinput></screen>
<para>Now, as the root user, install the <application>JDK</application>:</para>
<screen><userinput role='root'><command>cp -a j2sdk-image /opt/jdk/jdk-&jdk-src-version; &amp;&amp;
chown -R root:root /opt/jdk/jdk-&jdk-src-version;</command></userinput></screen>
<para>Restore the environment using the following commands:</para>
<screen><userinput><command>unset VERSION &amp;&amp;
unset MV &amp;&amp;
unset V &amp;&amp;
unset ALT_BOOTDIR &amp;&amp;
unset ALT_DEVTOOLS_PATH &amp;&amp;
unset BUILD_NUMBER &amp;&amp;
unset DEV_ONLY &amp;&amp;
unset ALT_MOZILLA_PATH &amp;&amp;
unset INSANE &amp;&amp;
unset MAKE_VERBOSE &amp;&amp;
unset ALT_CACERTS_FILE</command></userinput></screen>
</sect2>
<sect2>
<title>Command explanations</title>
<para><command>export ALT_BOOTDIR="$JAVA_HOME"</command>: This var sets
the location of the bootstrap <acronym>JDK</acronym>.</para>
<para><command>export ALT_MOZILLA_PATH=$PWD</command>: This tells the build
where to find the base directory of the plugin path (which contains the
<application>Mozilla</application> headers).</para>
<para><command>export ALT_DEVTOOLS_PATH="/usr/bin"</command>: This
changes the location where the build finds the needed executables.</para>
<para><command>export BUILD_NUMBER="blfs-&blfs-version;"</command>:
This will help you identify the compiled version of the runtime environment
and virtual machine by appending this information to the version
string.</para>
<para><command>export DEV_ONLY=true</command>: This command
skips compiling the documentation and eliminates a dependency on
<application>rpm</application>.</para>
<para><command>unset JAVA_HOME</command>: This clears the
<envar>JAVA_HOME</envar> variable as recommended by the build
instructions.</para>
<para><command>unset CLASSPATH</command>: This clears the
<envar>CLASSPATH</envar> variable as per the recommendations in the build
instructions.</para>
<para><command>unset CFLAGS/CXXFLAGS...</command>: These variables cause
miscompilation of the build. Never set them.</para>
<para><command>export INSANE=true</command>: The certified platform for the
build is Redhat Enterprise Advanced Server 2.1. This variable ensures that
all the errors related to compiling on a non-certified platform will be
displayed as warnings instead of errors.</para>
<para><command>export MAKE_VERBOSE=true</command>: Allows the compiler
commands to be displayed on the console.</para>
<para><command>export ALT_CACERTS_FILE...</command>: Specifies the
certificate file to use (from the installed binary
<application>JDK</application>).</para>
</sect2>
<sect2>
<title>Configuring <application>JDK</application></title>
<sect3><title>Configuration Information</title>
<para>There are now two Java 2 <acronym>SDK</acronym>'s installed in
<filename>/opt/jdk</filename>. You should decide on which one you
would like to use as the default. For example if you decide to use the source
compiled <application>JDK</application>, do the following:</para>
<screen><userinput><command>ln -nsf jdk-&jdk-src-version; /opt/jdk/jdk</command></userinput></screen>
<para>Add the following <filename>jdk.sh</filename> shell startup file to
the <filename>/etc/profile.d</filename> directory with the following
commands:</para>
<screen><userinput><command>cat &gt; /etc/profile.d/jdk.sh &lt;&lt; "EOF"</command>
# Begin /etc/profile.d/jdk.sh
# Set JAVA_HOME directory
JAVA_HOME=/opt/jdk/jdk
export JAVA_HOME
# Adjust PATH
pathappend ${JAVA_HOME}/bin PATH
# Auto Java Classpath Updating
# Create symlinks to this directory for auto classpath setting
AUTO_CLASSPATH_DIR=/usr/lib/classpath
if [ -z ${CLASSPATH} ]; then
CLASSPATH=.:${AUTO_CLASSPATH_DIR}
else
CLASSPATH="${CLASSPATH}:.:${AUTO_CLASSPATH_DIR}
fi
# Check for empty AUTO_CLASSPATH_DIR
ls ${AUTO_CLASSPATH_DIR}/*.jar &amp;> /dev/null &amp;&amp;
for i in ${AUTO_CLASSPATH_DIR}/*.jar
do CLASSPATH=${CLASSPATH}:"${i}"
done
export CLASSPATH
# End /etc/profile.d/jdk.sh
<command>EOF</command></userinput></screen>
<para>The <application>Java</application> plugin is loacated in
<filename class="directory">$JAVA_HOME/jre/plugin/i?86/ns7/</filename>.
Make a symbolic link to the file in that directory from your browser
plugins directory.</para>
<note><para>The plugin must be a symlink for it to work. If not, the browsers
just crash when you attempt to load a <application>Java</application>
application.</para></note>
</sect3>
</sect2>
<sect2>
<title>Contents</title>
<segmentedlist>
<segtitle>Installed Programs</segtitle>
<segtitle>Installed Libraries</segtitle>
<segtitle>Installed Directory</segtitle>
<seglistitem>
<seg>appletviewer, extcheck, idlj, jar, jarsigner, java, javac, javadoc,
javah, javap, javaws, jdb, keytool, native2ascii, orbd, policytool, rmic, rmid,
rmiregistry, serialver, servertool and tnameserv</seg>
<seg><envar>$JAVA_HOME</envar>/lib/*, <envar>$JAVA_HOME</envar>/jre/lib/*
and libjavaplugin_oji.so</seg>
<seg>/opt/jdk</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Short Descriptions</bridgehead>
<?dbfo list-presentation="list"?>
<varlistentry id="appletviewer">
<term><command>appletviewer</command></term>
<listitem><para>runs <application>Java</application> applets outside of the
context of a browser.</para>
<indexterm zone="jdk appletviewer">
<primary sortas="b-appletviewer">appletviewer</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="extcheck">
<term><command>extcheck</command></term>
<listitem><para>checks a specified <filename>JAR</filename> file for title
and version conflicts with any extensions installed in the
<acronym>JDK</acronym> software.</para>
<indexterm zone="jdk extcheck">
<primary sortas="b-extcheck">extcheck</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="idlj">
<term><command>idlj</command></term>
<listitem><para>generates <application>Java</application> bindings from a
given <acronym>IDL</acronym> file.</para>
<indexterm zone="jdk idlj">
<primary sortas="b-idlj">idlj</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="jar">
<term><command>jar</command></term>
<listitem><para>combines multiple files into a single <acronym>JAR</acronym>
archive file.</para>
<indexterm zone="jdk jar">
<primary sortas="b-jar">jar</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="jarsigner">
<term><command>jarsigner</command></term>
<listitem><para>signs <filename>JAR</filename> (Java ARchive) files and
verifies the signatures and integrity of a signed
<filename>JAR</filename>.</para>
<indexterm zone="jdk jarsigner">
<primary sortas="b-jarsigner">jarsigner</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="java">
<term><command>java</command></term>
<listitem><para>launches a <application>Java</application> application by
starting a <application>Java</application> runtime environment, loading a
specified class and invoking its main method.</para>
<indexterm zone="jdk java">
<primary sortas="b-java">java</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="javac">
<term><command>javac</command></term>
<listitem><para>reads class and interface definitions, written in the
<application>Java</application> programming language, and compiles them into
bytecode class files.</para>
<indexterm zone="jdk javac">
<primary sortas="b-javac">javac</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="javadoc">
<term><command>javadoc</command></term>
<listitem><para>parses the declarations and documentation comments in a set of
<application>Java</application> source files and produces a corresponding set
of <acronym>HTML</acronym> pages describing the classes, interfaces,
constructors, methods, and fields.</para>
<indexterm zone="jdk javadoc">
<primary sortas="b-javadoc">javadoc</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="javah">
<term><command>javah</command></term>
<listitem><para>generates <application>C</application> header and source files
that are needed to implement native methods.</para>
<indexterm zone="jdk javah">
<primary sortas="b-javah">javah</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="javap">
<term><command>javap</command></term>
<listitem><para>disassembles a <application>Java</application> class
file.</para>
<indexterm zone="jdk javap">
<primary sortas="b-javap">javap</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="javaws">
<term><command>javaws</command></term>
<listitem><para>launches java application/applets hosted on a network.</para>
<indexterm zone="jdk javaws">
<primary sortas="b-javaws">javaws</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="jdb">
<term><command>jdb</command></term>
<listitem><para>is a simple command-line debugger for
<application>Java</application> classes.</para>
<indexterm zone="jdk jdb">
<primary sortas="b-jdb">jdb</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="keytool">
<term><command>keytool</command></term>
<listitem><para>is a key and certificate management utility.</para>
<indexterm zone="jdk keytool">
<primary sortas="b-keytool">keytool</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="native2ascii">
<term><command>native2ascii</command></term>
<listitem><para> converts files that contain non-supported character encoding
into files containing Latin-1 or Unicode-encoded characters.</para>
<indexterm zone="jdk native2ascii">
<primary sortas="b-native2ascii">native2ascii</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="orbd">
<term><command>orbd</command></term>
<listitem><para>is used to enable clients to transparently locate and invoke
persistent objects on servers in the <acronym>CORBA</acronym>
environment.</para>
<indexterm zone="jdk orbd">
<primary sortas="b-orbd">orbd</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="policytool">
<term><command>policytool</command></term>
<listitem><para>creates and manages a policy file graphically.</para>
<indexterm zone="jdk policytool">
<primary sortas="b-policytool">policytool</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="rmic">
<term><command>rmic</command></term>
<listitem><para>generates stub and skeleton class files for remote objects
from the names of compiled <application>Java</application> classes that
contain remote object implementations.</para>
<indexterm zone="jdk rmic">
<primary sortas="b-rmic">rmic</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="rmid">
<term><command>rmid</command></term>
<listitem><para>starts the activation system daemon.</para>
<indexterm zone="jdk rmid">
<primary sortas="b-rmid">rmid</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="rmiregistry">
<term><command>rmiregistry</command></term>
<listitem><para>creates and starts a remote object registry on the specified
port on the current host.</para>
<indexterm zone="jdk rmiregistry">
<primary sortas="b-rmiregistry">rmiregistry</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="serialver">
<term><command>serialver</command></term>
<listitem><para>returns the serialVersionUID for one or more classes in a
form suitable for copying into an evolving class.</para>
<indexterm zone="jdk serialver">
<primary sortas="b-serialver">serialver</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="servertool">
<term><command>servertool</command></term>
<listitem><para>provides an ease-of-use interface for application programmers
to register, unregister, startup and shutdown a server.</para>
<indexterm zone="jdk servertool">
<primary sortas="b-servertool">servertool</primary>
</indexterm></listitem>
</varlistentry>
<varlistentry id="tnameserv">
<term><command>tnameserv</command></term>
<listitem><para>starts the <application>Java</application>
<acronym>IDL</acronym> name server.</para>
<indexterm zone="jdk tnameserv">
<primary sortas="b-tnameserv">tnameserv</primary>
</indexterm></listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>