/[gentoo]/xml/htdocs/doc/en/java.xml
Gentoo

Contents of /xml/htdocs/doc/en/java.xml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.33 - (hide annotations) (download) (as text)
Sun Sep 10 22:27:26 2006 UTC (8 years, 3 months ago) by nightmorph
Branch: MAIN
Changes since 1.32: +4 -8 lines
File MIME type: application/xml
more typo fixes, thanks again to honzig for reporting on IRC

1 neysx 1.11 <?xml version="1.0" encoding="UTF-8"?>
2 nightmorph 1.33 <!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/java.xml,v 1.32 2006/09/10 21:30:58 nightmorph Exp $ -->
3 swift 1.8 <!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
4 zhen 1.4
5 neysx 1.11 <guide link="/doc/en/java.xml">
6     <title>Gentoo Java Guide</title>
7    
8 nightmorph 1.23 <author title="Author">
9 rane 1.28 <mail link="nichoj@gentoo.org">Joshua Nichols</mail>
10 neysx 1.11 </author>
11 nightmorph 1.23 <author title="Author">
12 rane 1.28 <mail link="karltk@gentoo.org">Karl Trygve Kalleberg</mail>
13 neysx 1.11 </author>
14 swift 1.13 <author title="Editor">
15 nightmorph 1.23 <mail link="nightmorph@gentoo.org">Joshua Saddler</mail>
16 swift 1.13 </author>
17 neysx 1.11
18     <abstract>
19 nightmorph 1.23 This guide will introduce you to Java and explain how to use Java with Gentoo
20     Linux.
21 neysx 1.11 </abstract>
22    
23 nightmorph 1.23 <!-- The content of this document is licensed under the CC-BY-SA license -->
24     <!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
25 neysx 1.11 <license/>
26    
27 nightmorph 1.32 <version>0.9</version>
28     <date>2006-09-10</date>
29 neysx 1.11
30     <chapter>
31 swift 1.13 <title>What is Java?</title>
32 neysx 1.11 <section>
33     <title>Overview</title>
34     <body>
35    
36     <p>
37 nightmorph 1.23 Java is a programming language developed by engineers of Sun Microsystems. The
38     language is object-oriented and designed to run on multiple platforms without
39     the need of recompiling code for each platform. Although Java can be compiled
40     as a native program, much of Java's popularity can be attributed to its
41     portability, along with other features such as garbage collection. To make
42     platform independence possible the Java compiler compiles the Java code to an
43     intermediate representation called "Java bytecode" that runs on a JRE (Java
44     Runtime Environment) and not directly on the operating system.
45 swift 1.13 </p>
46    
47     <p>
48 nightmorph 1.23 In order to run Java bytecode, one needs to have a JRE (Java Runtime
49     Environment) installed. A JRE provides core libraries, a platform dependent
50     Java Virtual Machine, plug-ins for browsers, among other things. A JDK (Java
51     Development Kit) adds programming tools, such as a bytecode compiler and a
52     debugger.
53 swift 1.13 </p>
54    
55     </body>
56     </section>
57     </chapter>
58    
59     <chapter>
60 rane 1.28 <title>New Java System</title>
61     <section>
62     <body>
63    
64     <p>
65     The way Java is handled on Gentoo has recently seen many changes and
66     improvements. This has only happened very recently, and as a result, all the
67     packages related to it are marked with testing keywords, ie ~x86. This
68     document assumes you are using the new system.
69     </p>
70    
71     </body>
72     </section>
73     <section>
74     <title>Keywords</title>
75     <body>
76    
77     <p>
78 nightmorph 1.30 If you are using the stable tree opposed to ~arch, you will need to add some
79     entries to your <path>/etc/portage/package.keywords</path>:
80 rane 1.28 </p>
81    
82     <pre caption="package.keywords">
83     # Core Gentoo/Java Packages
84     dev-java/ant-core
85     dev-java/ant-tasks
86     dev-java/ant
87     dev-java/java-config
88     dev-java/java-config-wrapper
89     dev-java/javatoolkit
90 rane 1.29 dev-java/sun-jce-bin
91 rane 1.28 # JDKs
92     =dev-java/sun-jdk-1.4*
93     =dev-java/sun-jdk-1.5*
94     =dev-java/ibm-jdk-bin-1.4*
95     =dev-java/ibm-jdk-bin-1.5*
96     =dev-java/jrockit-jdk-bin-1.4*
97     =dev-java/jrockit-jdk-bin-1.5*
98     =dev-java/blackdown-jdk-1.4*
99     dev-java/kaffe
100     # JREs
101     =dev-java/sun-jre-bin-1.4*
102     =dev-java/sun-jre-bin-1.5*
103     =dev-java/ibm-jre-bin-1.4*
104     =dev-java/blackdown-jre-1.4*
105     # Virtuals
106     virtual/jdk
107     virtual/jre
108     # Compilers
109     dev-java/eclipse-ecj
110     dev-java/jikes
111     # Documentation
112     dev-java/java-sdk-docs
113     # Misc packages that have been updated to generation-2,
114     # where the generation-1 won't build and/or run properly
115     dev-java/lucene
116     # These have optional Java support, but need ~arch to function properly
117     # with generation-2
118     dev-util/subversion
119     sys-libs/db
120     </pre>
121    
122 nightmorph 1.30 <warn>
123     It is crucial that you list ALL these packages in
124     <path>/etc/portage/package.keywords</path>, otherwise you will have problems in
125     the later steps of this guide. Your new Java system will not function correctly
126     without this list.
127     </warn>
128 rane 1.28
129     </body>
130     </section>
131     <section>
132     <title>Existing installs</title>
133     <body>
134    
135     <p>
136     For existing installs, regardless of if you have installed anything Java
137     before, make sure you have followed the <uri
138     link="/proj/en/java/java-upgrade.xml">Java Upgrade Guide</uri>.
139     </p>
140    
141     </body>
142     </section>
143     <section>
144     <title>New installs</title>
145     <body>
146    
147     <p>
148     New installs should require no further preparation.
149     </p>
150    
151     </body>
152     </section>
153     </chapter>
154    
155     <chapter>
156     <title>Installing a Virtual Machine</title>
157 swift 1.13 <section>
158     <title>The choices</title>
159     <body>
160    
161     <p>
162 rane 1.28 Gentoo provides numerous Runtime Environments (JREs) and Development Kits
163     (JDKs). Among the current choices, we have:
164 swift 1.13 </p>
165    
166 nightmorph 1.23 <table>
167     <tr>
168     <th>Vendor</th>
169     <th>JDK</th>
170     <th>JRE</th>
171     </tr>
172     <tr>
173     <ti>The Blackdown Java Kit</ti>
174 rane 1.27 <ti>dev-java/blackdown-jdk</ti>
175 nightmorph 1.23 <ti>dev-java/blackdown-jre</ti>
176     </tr>
177     <tr>
178     <ti>Sun's Java Kit</ti>
179     <ti>dev-java/sun-jdk</ti>
180     <ti>dev-java/sun-jre-bin</ti>
181     </tr>
182     <tr>
183     <ti>The IBM Java Kit</ti>
184     <ti>dev-java/ibm-jdk-bin</ti>
185     <ti>dev-java/ibm-jre-bin</ti>
186     </tr>
187     <tr>
188     <ti>The Compaq Java Kit for Alpha/Linux/GNU</ti>
189     <ti>dev-java/compaq-jdk</ti>
190     <ti>dev-java/compaq-jre</ti>
191     </tr>
192     <tr>
193     <ti>BEA WebLogic's J2SE Development Kit</ti>
194     <ti>dev-java/jrockit-jdk-bin</ti>
195     </tr>
196     </table>
197    
198     <!--
199 rane 1.26 TODO: list free implementations?
200     note about not drop-in replacements
201 nightmorph 1.23 kaffe/sablevm/gcj/jamvm
202     -->
203 swift 1.13 <p>
204 rane 1.28 The default for Java 1.4 is the Blackdown JRE/JDK pair, as it is freely
205     ("free as in beer") available without any registration fuss.
206 neysx 1.11 </p>
207    
208     <p>
209 rane 1.28 JREs and JDKs from Sun, IBM, and BEA are generally faster, but getting them
210     is a bit more work, as you are required to read and accept their license before
211     downloading (IBM additionally requires you to register).
212 neysx 1.11 </p>
213    
214 nightmorph 1.23 </body>
215     </section>
216     <section>
217     <title>Installing a JRE/JDKs</title>
218     <body>
219    
220 neysx 1.11 <p>
221 nightmorph 1.23 To install your profile's default JDK, you can run <c>emerge virtual/jdk</c>.
222     Or to install your profile's default JRE, you can <c>emerge virtual/jre</c>.
223 neysx 1.11 </p>
224    
225 rane 1.28 <p>
226     In recent events, Sun has relicensed their JDK and JRE under a more Linux
227     distro friendly license. As a result, Sun releases Java 1.5 and onwards are
228     freely downloadable, without any further hassle.
229     </p>
230    
231 nightmorph 1.23 <note>
232     A JDK also includes a JRE, so if you install a JDK you shouldn't have to also
233     have to install a JRE.
234     </note>
235    
236 neysx 1.11 </body>
237     </section>
238     <section>
239 rane 1.28 <title>Installing fetch-restricted virtual machines</title>
240 neysx 1.11 <body>
241    
242     <p>
243 rane 1.28 As already mentioned, some of the JDKs and JREs require you to jump through a
244     few hoops before installing. Simply emerge the packages as you normally would.
245     The ebuilds will then instruct you where to go and what to download.
246 neysx 1.11 </p>
247    
248     <p>
249     You should download the indicated file(s) into
250 nightmorph 1.23 <path>/usr/portage/distfiles</path>. Once there, you can rerun the emerge
251     command, at which point the JRE/JDK will be begin to install.
252 neysx 1.11 </p>
253    
254     </body>
255     </section>
256     </chapter>
257    
258     <chapter>
259 rane 1.28 <title>Configuring your virtual machine</title>
260 neysx 1.11 <section>
261     <title>Overview</title>
262     <body>
263    
264     <p>
265 nightmorph 1.23 Gentoo has the ability to have multiple JDKs and JREs installed without causing
266     conflicts.
267 neysx 1.11 </p>
268    
269     <p>
270 nightmorph 1.23 Using the <c>java-config</c> tool, you can set the system-wide default
271     (provided you have root access). Users can also use <c>java-config</c> to set
272     up their own personal default.
273 neysx 1.11 </p>
274    
275 nightmorph 1.23 <note>
276     You can also use <e>eselect</e> to change the system and user vm. See
277 nightmorph 1.24 <c>eselect java-vm help</c>.
278 nightmorph 1.23 </note>
279    
280 neysx 1.11 </body>
281     </section>
282     <section>
283 rane 1.28 <title>Setting a default virtual machine</title>
284 neysx 1.11 <body>
285    
286     <p>
287 nightmorph 1.23 Running the command <c>java-config --list-available-vms</c> will give you a
288     list of all JREs and JDKs installed on your system. Here is an example of
289     output:
290 neysx 1.11 </p>
291    
292     <pre caption="Listing available VMs">
293 neysx 1.12 # <i>java-config --list-available-vms</i>
294 nightmorph 1.23 1) Blackdown JDK 1.3.1 [blackdown-jdk-1.3] (/etc/env.d/java/20blackdown-jdk-1.3)
295     2) Blackdown JDK 1.4.2.02 [blackdown-jdk-1.4] (/etc/env.d/java/20blackdown-jdk-1.4)
296     3) Blackdown JRE 1.4.2.02 [blackdown-jre-1.4] (/etc/env.d/java/20blackdown-jre-1.4)
297     4) IBM JDK 1.4.2 [ibm-jdk-bin-1.4] (/etc/env.d/java/20ibm-jdk-bin-1.4)
298     5) IBM JRE 1.4.2 [ibm-jre-bin-1.4] (/etc/env.d/java/20ibm-jre-bin-1.4)
299     6) WebLogic JRockit 1.4.2.05 [jrockit-jdk-bin-1.4] (/etc/env.d/java/20jrockit-jdk-bin-1.4)
300     7) WebLogic JRockit 1.5.0.03 [jrockit-jdk-bin-1.5] (/etc/env.d/java/20jrockit-jdk-bin-1.5)
301     8) Sun JDK 1.3.1.13 [sun-jdk-1.3] (/etc/env.d/java/20sun-jdk-1.3)
302     9) Sun JDK 1.4.2.09 [sun-jdk-1.4] (/etc/env.d/java/20sun-jdk-1.4)
303     *) Sun JDK 1.5.0.04 [sun-jdk-1.5] (/etc/env.d/java/20sun-jdk-1.5)
304     11) Sun JRE 1.4.2.09 [sun-jre-bin-1.4] (/etc/env.d/java/20sun-jre-bin-1.4)
305     12) Sun JRE 1.5.0.04 [sun-jre-bin-1.5] (/etc/env.d/java/20sun-jre-bin-1.5)
306 neysx 1.11 </pre>
307    
308     <p>
309 nightmorph 1.23 The <e>*</e> indicates this is the current active vm (system-vm or user-vm when
310     set). The name in the brackets (<e>[]</e>) is the handle or ID for that
311     particular VM. You use the handle or the number to <c>java-config
312     --set-system-vm</c>. Here is an example of how to set the system VM.
313 neysx 1.11 </p>
314 zhen 1.4
315 neysx 1.11 <pre caption="Setting the System VM">
316 nightmorph 1.23 <comment>(By handle (preferred))</comment>
317     # <i>java-config --set-system-vm blackdown-jdk-1.4</i>
318     <comment>(By number)</comment>
319     # <i>java-config --set-system-vm 2</i>
320 neysx 1.11 </pre>
321 drobbins 1.1
322 nightmorph 1.23 <p>
323     As a regular user, you can use <c>java-config --set-user-vm</c>.
324     </p>
325    
326 neysx 1.11 <note>
327 nightmorph 1.23 You no longer have to <c>source</c> the profile for updates to the user/system
328     VM take place.
329 neysx 1.11 </note>
330    
331 nightmorph 1.23 </body>
332     </section>
333     <section id="preferred-vm">
334     <title>Preferred VM</title>
335     <body>
336    
337     <p>
338     While merging Java packages, the VM can and will be switched as necessary.
339     </p>
340    
341     <p>
342     Because of the wide variety of available VMs, we do not have the resources to
343     test and verify every package works on all of them. So to ensure that every
344     packages merges smoothly, we have defined a list of <e>default/supported
345     VMs</e> per arch. You can find them in
346     <path>/usr/share/java-config/config/jdk-defaults.conf</path>. When you are
347     merging a Java package, and it detects one of the VM in that file is installed,
348     it will automatically use that VM, instead of the system-vm.
349     </p>
350    
351 neysx 1.11 <p>
352 nightmorph 1.23 The merge time VM switching is also needed when, for example, your system-vm is
353     set a 1.4 VM and the package you are merging requires a 1.5 VM. While merging
354     it will use the preferred 1.5 VM, leaving your system-vm choice intact.
355 neysx 1.11 </p>
356 drobbins 1.1
357 nightmorph 1.23 <p>
358     Of course, Gentoo is all about choice, so you can override these defaults in
359     <path>/etc/java-config-2/build/jdk.conf</path> and have complete control over
360     which VM will get used. Some examples:
361     </p>
362    
363     <pre caption="Example /etc/java-config-2/build/jdk.conf">
364     <comment>(I always want it to use a sun-jdk, ie sun-jdk-1.4 for 1.4, sun-jdk-1.5 for 1.5, etc)</comment>
365     *=sun-jdk
366 neysx 1.11 </pre>
367 drobbins 1.1
368 nightmorph 1.23 <pre caption="Example /etc/java-config-2/build/jdk.conf">
369     <comment>(Always use sun-jdk-1.5 wherever possible, except for when a 1.4 or 1.3 VM is explicitly required)</comment>
370     *=sun-jdk-1.5
371     </pre>
372    
373     <pre caption="Example /etc/java-config-2/build/jdk.conf">
374     <comment># For 1.3 I prefer sun-jdk 1.4 but when it is not available, use ibm-jdk-bin,
375     # For 1.4, use blackdown-jdk, and for 1.5, use sun-jdk </comment>
376     1.3=sun-jdk-1.4 ibm-jdk-bin
377     1.4=blackdown-jdk
378     1.5=sun-jdk
379     </pre>
380    
381     <warn>
382     You do not have to edit this file. If you change these options to use a
383     unsupported VM, things could possibly break. Bugs reported with a unsupported
384 rane 1.26 VM won't be prioritized as much as bugs present within supported VMs.
385 nightmorph 1.23 </warn>
386    
387     </body>
388     </section>
389     </chapter>
390    
391     <chapter>
392     <title>Compilers</title>
393     <section>
394     <body>
395    
396 neysx 1.11 <p>
397 nightmorph 1.23 The standard Java compiler used for building is javac, which comes with each
398     JDK. In addition to configuring the VM used at build time, it is also possible
399     configure which compiler is used. Essentially, you define a list your
400     preference for which compiler to use in
401     <path>/etc/java-config-2/build/compilers.conf</path>.
402 neysx 1.11 </p>
403    
404 nightmorph 1.23 <pre caption="/etc/java-config-2/build/compilers.conf">
405     # If the ebuild supports it
406     # it will check the COMPILERS var front to back and
407     # use the first compiler that is installed
408    
409     COMPILERS="ecj-3.1 jikes javac"
410     </pre>
411    
412 neysx 1.11 <p>
413 nightmorph 1.23 Some compilers don't support all possible -target and -source arguments.
414     Therefore, each compiler in the list is checked to see if it can support the
415     desired -source/-target. javac will work in all cases, so if no other suitable
416     compiler is found, it will be used instead.
417 neysx 1.11 </p>
418    
419 nightmorph 1.23 <p>
420     More details about each compiler are provided below:
421     </p>
422    
423     <table>
424     <tr>
425     <th>Name</th>
426     <th>Handle</th>
427     <th>Package</th>
428     <th>Description</th>
429     </tr>
430     <tr>
431     <ti>javac</ti>
432     <ti>javac</ti>
433     <ti>N/A</ti>
434     <ti>
435     This is the default compiler that will be used, and comes with each JDK.
436     </ti>
437     </tr>
438     <tr>
439     <ti>jikes</ti>
440     <ti>jikes</ti>
441     <ti>dev-java/jikes</ti>
442     <ti>
443     Jikes was originally developed by IBM. Anecdotally, it is generally quicker
444     than javac. Note however, that it is more pedantic, and will fail under a
445     few circumstances where javac has no issue. It also does not support Java
446     1.5 syntax yet.
447     </ti>
448     </tr>
449     <tr>
450     <ti>Eclipse Compiler for Java</ti>
451     <ti>ecj-3.1</ti>
452     <ti>=dev-java/eclipse-ecj-3.1*</ti>
453     <ti>
454     ECJ is the compiler used by the Eclipse software development kit. It is
455     very full featured, and is pretty fast. It does support Java 1.5 syntax.
456     </ti>
457     </tr>
458     </table>
459    
460     </body>
461     </section>
462     </chapter>
463    
464     <chapter>
465     <title>Setting a default CLASSPATH</title>
466     <section>
467     <body>
468    
469     <warn>
470     The options explained in this section should be considered deprecated and will
471 rane 1.26 most likely be removed in the future. We strongly recommend against using
472 nightmorph 1.23 these, because your Java projects or application should ideally manage their
473     own classpaths. If you choose to specify a default CLASSPATH, some applications
474     may behave unexpectedly, because classes they weren't expecting would be on the
475     classpath.
476     </warn>
477    
478     <p>
479     <c>java-config</c> can also be used to set a system-wide default CLASSPATH, as
480     well a user-specific default CLASSPATH.
481     </p>
482    
483     <p>
484     First, you will want to list available Java libraries installed on your system
485     that might want to be put in your CLASSPATH. Here is an example of output:
486     </p>
487    
488     <pre caption="Listing classes">
489     # <i>java-config --list-available-packages</i>
490     [xerces-2] The next generation of high performance, fully compliant XML parsers in the Apache Xerces family (/usr/share/xerces-2/package.env)
491     [junit] Simple framework to write repeatable tests (/usr/share/junit/package.env)
492     [bsh] BeanShell: A small embeddable Java source interpreter (/usr/share/bsh/package.env)
493     [bcel] The Byte Code Engineering Library: analyze, create, manipulate Java class files (/usr/share/bcel/package.env)
494     [log4j] A low-overhead robust logging package for Java (/usr/share/log4j/package.env)
495     ...
496     </pre>
497    
498     <p>
499     Again, the names in brackets (<e>[]</e>) are the IDs that you have to pass to
500     <c>java-config --set-system-classpath</c>. Here is an example:
501     </p>
502    
503     <pre caption="Setting classpaths">
504     # <i>java-config --set-system-classpath log4j,xerces-2</i>
505     </pre>
506    
507     <note>
508     The current directory (<path>.</path>) will not be part of the system
509     classpath, as that should be added in your system's login profile.
510     </note>
511    
512     <p>
513 rane 1.26 You will have to update your environment by logging out, then in again or
514     sourcing <path>/etc/profile</path>.
515 nightmorph 1.23 </p>
516    
517     <p>
518     For users, <c>java-config --set-user-classpath</c> will create
519     <path>~/.gentoo/java-env-classpath</path>, which you should then source from
520     your shell's profile.
521     </p>
522    
523     <pre caption="Sourcing user specific classpath">
524     <i>if [[ -f "${HOME}/.gentoo/java-env-classpath" ]]; then
525     source ${HOME}/.gentoo/java-env-classpath
526     fi</i>
527     </pre>
528    
529     <p>
530     If you really want a system wide or user default classpath you can add
531 rane 1.25 something like the following to your shell's profile. But we would advise
532 nightmorph 1.23 against it.
533     </p>
534    
535     <pre caption="Setting classpath">
536     # <i>export CLASSPATH="${CLASSPATH}:$(java-config --classpath log4j,xerces-2)"</i>
537     </pre>
538    
539 neysx 1.11 </body>
540     </section>
541 swift 1.13 </chapter>
542    
543     <chapter>
544     <title>USE flags for use with Java</title>
545     <section>
546     <title>Setting USE flags</title>
547     <body>
548    
549     <p>
550 rane 1.17 For more information regarding USE flags, refer to the <uri
551     link="/doc/en/handbook/handbook-x86.xml?part=2&amp;chap=2">USE flags</uri>
552 swift 1.13 chapter from the Gentoo Handbook.
553 neysx 1.11 </p>
554    
555     </body>
556     </section>
557 swift 1.13 <section>
558     <title>The flags</title>
559     <body>
560    
561     <ul>
562 nightmorph 1.23 <li>The <b>java</b> flag adds support for Java in a variety of programs</li>
563     <li>
564     The <b>nsplugin</b> flag adds support for Mozilla-like browsers (including
565 nightmorph 1.33 Firefox). You will need this for viewing Java applets in your Mozilla-like
566 nightmorph 1.23 browser.
567     </li>
568 rane 1.17 <li>
569 rane 1.28 The <b>source</b> flag installs a zip of the source code of a package.
570 nightmorph 1.33 This is traditionally used for IDEs to 'attach' source to the libraries you
571     are using.
572 rane 1.28 </li>
573     <li>
574     For Java packages, the <b>doc</b> flag will build API documentation using
575     javadoc.
576     </li>
577 swift 1.13 </ul>
578    
579     </body>
580     </section>
581 neysx 1.11 </chapter>
582    
583     <chapter>
584     <title>Additional resources</title>
585     <section>
586     <title>Off-line resources</title>
587     <body>
588    
589     <ul>
590 rane 1.17 <li>java-config man page</li>
591     <li><c>java-config --help</c></li>
592 neysx 1.11 </ul>
593    
594     </body>
595     </section>
596     <section>
597     <title>Online resources</title>
598     <body>
599 rane 1.17
600 neysx 1.11 <ul>
601 nightmorph 1.23 <li>
602     The <uri link="http://www.gentoo.org/proj/en/java/">Java Project
603     Page</uri>
604     </li>
605 rane 1.17 <li>
606     The <uri
607 nightmorph 1.23 link="http://news.gmane.org/gmane.linux.gentoo.java">gentoo-java</uri>,
608     <uri
609     link="http://news.gmane.org/gmane.linux.gentoo.user">gentoo-user</uri>, and
610     <uri
611     link="http://news.gmane.org/gmane.linux.gentoo.devel">gentoo-dev</uri>
612 alin 1.18 mailing list archives
613 rane 1.17 </li>
614 alin 1.18 <li>#gentoo and #gentoo-java on irc.freenode.net</li>
615 rane 1.17 <li>
616     <uri
617     link="http://en.wikipedia.org/wiki/Java_programming_language">Wikipedia's
618     entry for Java</uri>
619     </li>
620 neysx 1.11 </ul>
621    
622     </body>
623     </section>
624     </chapter>
625 neysx 1.12 </guide>

  ViewVC Help
Powered by ViewVC 1.1.20