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