<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Eclipse Project Release Notes 3.0.0</title>
</head>

<body>

<h1>Eclipse Project Release Notes</h1>
<p>Release 3.0.0<br>
 June 25, 2004</p>
<p align="left"><strong>This software is OSI Certified Open Source Software.<br>
OSI Certified is a certification mark of the Open Source Initiative.&nbsp;</strong></p>
<blockquote>
  <p align="left"><a href="#Target Operating Environments">1. Target Operating
  Environments</a><br>
  <a href="#Compatibility with Previous Release">2. Compatibility with Previous
  Releases</a><br>
  <a href="#Known Issues">3. Known Issues</a><br>
  <a href="#Running Eclipse">4. Running Eclipse</a><br>
  <a href="#Upgrading">5. Upgrading a Workspace from a Previous Release</a><br>
  <a href="#Interoperability with Previous Releases">6. Interoperability with
  Previous Releases</a><br>
  </p>
</blockquote>
<h2>1. <a name="Target Operating Environments"></a> Target Operating
Environments</h2>
<p>Most of the Eclipse SDK is &quot;pure&quot; Java<font size="1"><sup>TM</sup></font>
code and has no direct
dependence on the underlying operating system. The chief dependence is therefore
on the Java 2 Platform itself. The 3.0 release of the Eclipse Project is written
and compiled against version 1.4 of the Java 2 Platform APIs, and targeted to
run on version 1.4 of the Java 2 Runtime Environment, Standard Edition.</p>
<p>There are many different implementations of the Java 2 Platform running atop
a variety of operating systems. We focus Eclipse testing on a handful of popular
<span class="header">combinations of operating system and Java 2 Platform; these
are our <em>reference platforms</em>. Eclipse undoubtedly runs fine in many
operating environments beyond the reference platforms we test. However, since we
do not systematically test them we cannot vouch for them. Problems encountered
when running Eclipse on non-reference platform that cannot be recreated on any
reference platform will be given lower priority than problems with running
Eclipse on a reference platform.</span></p>
<p>Eclipse SDK 3.0 has been tested and validated on the following reference
platforms:</p>
<table width="821" border="1">
  <tr bgcolor="#CCCCCC">
    <th colspan="4">
      <div align="center">
        <b><font size="+1">Eclipse Reference Platforms</font></b>
      </div>
    </th>
  </tr>
  <tr>
    <td width="205"><b>Operating system</b></td>
    <td width="76"><b>Processor architecture</b></td>
    <td width="59"><b>Window system</b></td>
    <td width="453"><b>Java 2 Platform</b></td>
  </tr>
  <tr>
    <td width="205">Microsoft Windows XP</td>
    <td width="76">Intel x86</td>
    <td width="59">Win32</td>
    <td width="453">Sun Java 2 SDK, Standard Edition, version 1.4.2_03 for
      Microsoft Windows</td>
  </tr>
  <tr>
    <td width="205">Microsoft Windows XP</td>
    <td width="76">Intel x86</td>
    <td width="59">Win32</td>
    <td width="453">
      <p>IBM 32-bit SDK for Windows, Java 2 Technology Edition, Version 1.4.1</p>
    </td>
  </tr>
  <tr>
    <td width="205">Red Hat Enterprise Linux WS 3</td>
    <td width="76">Intel x86</td>
    <td width="59">GTK</td>
    <td width="453">Sun Java 2 SDK, Standard Edition, 1.4.2_03 for Linux x86</td>
  </tr>
  <tr>
    <td width="205">Red Hat Enterprise Linux WS 3</td>
    <td width="76">Intel x86</td>
    <td width="59">GTK</td>
    <td width="453">IBM 32-bit SDK for Linux on Intel architecture, Java 2
      Technology Edition, Version 1.4.1</td>
  </tr>
  <tr>
    <td width="205">SuSE Linux 8.2</td>
    <td width="76">Intel x86</td>
    <td width="59">GTK</td>
    <td width="453">Sun Java 2 SDK, Standard Edition, 1.4.2_03 for Linux x86</td>
  </tr>
  <tr>
    <td width="205">SuSE Linux 8.2</td>
    <td width="76">Intel x86</td>
    <td width="59">GTK</td>
    <td width="453">IBM 32-bit SDK for Linux on Intel architecture, Java 2
      Technology Edition, Version 1.4.1</td>
  </tr>
  <tr>
    <td width="205">Sun Solaris 8</td>
    <td width="76">SPARC</td>
    <td width="59">Motif</td>
    <td width="453">Sun Java 2 SDK, Standard Edition, 1.4.2_03 for Solaris SPARC</td>
  </tr>
  <tr>
    <td width="205">HP HP-UX 11i</td>
    <td width="76">hp9000<br>
      PA-RISC</td>
    <td width="59">Motif</td>
    <td width="453"><span class="header">HP-UX SDK for the Java 2 platform,
      version 1.4.2.00 for hp9000 PA-RISC</span></td>
  </tr>
  <tr>
    <td width="205" height="21">IBM AIX 5L Version 5.2</td>
    <td width="76">PowerPC</td>
    <td width="59">Motif</td>
    <td width="453">
      <p>IBM 32-bit SDK for AIX, Java 2 Technology Edition, Version 1.4.1</p>
    </td>
  </tr>
  <tr>
    <td width="205">Apple Mac OS X 10.3</td>
    <td width="76">PowerPC</td>
    <td width="59">Carbon</td>
    <td width="453">Java 2 Standard Edition 1.4.1 for Mac OS X</td>
  </tr>
</table>
<p>Although untested, Eclipse should work fine on other OSes that support the
same window system. For Win32: Windows 98, ME, NT, 2000, and Server 2003; SWT
HTML viewer requires Internet Explorer 5 (or higher). For GTK on other Linux
systems: version 2.2.1 of the GTK+ widget toolkit and associated librares (GLib,
Pango); SWT HTML viewer requires Mozilla 1.4GTK2. For Motif on other Linux
systems: Open Motif 2.1 (included); SWT HTML viewer requires Mozilla 1.4GTK2.</p>
<p>An early access version of Eclipse is available for 64-bit Linux GTK. Testing
has been limited to early access 64-bit J2SEs running on AMD64 processors.</p>
<p>SWT is also supported on the QNX Neutrino operating system, x86 processor,
Photon window system, and IBM J9 VM version 2.0. Eclipse 3.0 on Windows or Linux
can be used cross develop QNX applications.</p>
<h4>Internationalization</h4>
<p>The Eclipse Platform is designed as the basis for internationalized products.
The user interface elements provided by the Eclipse SDK components, including
dialogs and error messages, are externalized. The English strings are provided
as the default resource bundles.</p>
<p>Latin-1 locales are supported by the Eclipse SDK on all of the above
operating environments; DBCS locales are supported by the Eclipse SDK on the
Windows, GTK, and Motif window systems; BIDI locales are supported by the
Eclipse SDK only on Windows operating environments.
<p>The Eclipse SDK supports GB 18030, the new Chinese code page standard, on
Windows XP and 2000, and Linux.
<p>German and Japanese locales have been tested.</p>
<h4>BIDI support</h4>
<p>SWT fully supports BIDI on Windows (only). On Linux GTK, SWT supports
entering and displaying BIDI text.</p>
<p>The Eclipse SDK is a development environment targeted at technical
professionals - not an end user application. However, the Eclipse SDK tools will
permit technical professionals who are working in English to build Hebrew/Arabic
end user Java programs which are themselves not based on the Eclipse SDK. The
BIDI support in the Eclipse SDK allows a Java programmer to work with BIDI
strings, code comments, etc. but the Eclipse SDK itself is not designed to be
localized for BIDI locales and its widget orientation can not be changed.</p>
<h2>2. <a name="Compatibility with Previous Release"></a> Compatibility with
Previous Releases</h2>
<h3>Compatibility of Release 3.0 with 2.1 (and 2.0)</h3>
<p>Eclipse 3.0 is compatible with Eclipse 2.0 and 2.1 to the greatest
extent possible.</p>
<p><b>API Contract Compatibility:</b> Eclipse SDK 3.0 is upwards
contract-compatible with Eclipse SDK 2.0 and 2.1 except in those areas noted in
the <em>Eclipse
3.0 Plug-in Migration Guide</em>. Programs that use affected APIs and extension points
will need to be ported to Eclipse SDK 3.0 APIs. Downward contract compatibility
is not supported. There is no guarantee that compliance with Eclipse SDK 3.0
APIs would ensure compliance with Eclipse SDK 2.0 or 2.1 APIs. Refer to <i><a href="http://eclipse.org/eclipse/development/java-api-evolution.html">Evolving
Java-based APIs</a></i> for a discussion of the kinds of API changes that
maintain contract compatibility.</p>
<p><b>Binary (plug-in) Compatibility:</b> Eclipse SDK 3.0 is upwards
binary-compatible with Eclipse SDK 2.0 and 2.1 except in those areas noted in
the <em>Eclipse
3.0 Plug-in Migration Guide</em>. Eclipse 3.0 will include additional runtime
compatibility mechanisms to provide effective binary API compatibility. Downward
plug-in compatibility is not supported. Plug-ins for Eclipse SDK 3.0 will not be
usable in Eclipse SDK 2.0 or 2.1. Refer to <i><a href="http://eclipse.org/eclipse/development/java-api-evolution.html">Evolving
Java-based APIs</a></i> for a discussion of the kinds of API changes that
maintain binary compatibility.
<p><b>Source Compatibility:</b> Eclipse SDK 3.0 is upwards source-compatible
with Eclipse SDK 2.0 or 2.1 except in the areas noted in the <em>Eclipse
3.0 Plug-in Migration Guide</em>. This means that source files written to use Eclipse
SDK 2.0 or 2.1 APIs can be successfully compiled and run against Eclipse SDK 3.0
APIs. Since source compatibilities are easy to deal with, maintaining source
compatibility is considered much less important than maintaining contract and
binary compatibility. Downward source compatibility is not supported. If source
files use new Eclipse SDK APIs, they will not be usable with an earlier version
of the Eclipse SDK.
<p><b>Workspace Compatibility:</b> Eclipse SDK 3.0 is upwards
workspace-compatible with Eclipse SDK 2.0 or 2.1 except as noted in the next
section. This means that workspaces and projects created with Eclipse SDK 2.0 or
2.1 can be successfully opened by Eclipse SDK 3.0 and upgraded to a 3.0
workspace. This includes both hidden metadata, which is localized to a
particular workspace, as well as metadata files found within a workspace project
(e.g., the .project file), which may propagate between workspaces via file
copying or team repositories. Individual plug-ins developed for Eclipse SDK 3.0
should provide similar upwards compatibility for their hidden and visible
workspace metadata created by earlier versions; 3.0 plug-in developers are
responsible for ensuring that their plug-ins recognize 3.0, 2.1, and 2.0
metadata and process it appropriately. User interface session state may be
discarded when a workspace is upgraded. Downward workspace compatibility is not
supported. A workspace created (or opened) by a product based on Eclipse 3.0
will be unusable with a product based an earlier version of Eclipse. Visible
metadata files created (or overwritten) by Eclipse 3.0 will generally be
unusable with earlier versions of Eclipse.
<p><b>Non-compliant usage of API's</b>: All non-API methods and classes, and
certainly everything in a package with &quot;internal&quot; in its name, are
considered implementation details which may vary between operating environment
and are subject to change without notice. Client plug-ins that directly depend
on anything other than what is specified in the Eclipse SDK API are inherently
unsupportable and receive no guarantees about compatibility within a single
release much less with an earlier releases. Refer to <i><a href="http://www.eclipse.org/articles/Article-API%20use/eclipse-api-usage-rules.html">How
to Use the Eclipse API</a></i> for information about how to write compliant
plug-ins.
<h3>2.1 Incompatibilities between release 3.0 and 2.1</h3>
<p>Eclipse 3.0 breaks compatibility with Eclipse 2.1 in areas described in the <i>
Eclipse 3.0 Plug-in Migration Guide</i> located in the Platform Plug-in Developer
Guide (one of the help books included with this released, also available <a href="http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/org.eclipse.platform.doc.isv/porting/eclipse_3_0_porting_guide.html">here</a>
on the web).</p>
<h2>3. <a name="Known Issues"></a> Known Issues</h2>
<blockquote>
  <p><a href="#I-Platform">3.1 Platform</a><br>
  &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Core">3.1.1 Core</a><br>
  &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Ant">3.1.2 Ant</a><br>
  &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Help">3.1.3 Help</a><br>
  &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-UI">3.1.4 UI</a><br>
  &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Text">3.1.5 Text</a><br>
  &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-SWT">3.1.6 SWT</a><br>
  &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Team-CVS">3.1.7 Team and CVS</a><br>
  &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Install-Update">3.1.8
  Install/Update</a><br>
  &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Debug">3.1.9 Debug</a><br>
  &nbsp;&nbsp;&nbsp;&nbsp; <a href="#I-Platform-Compare">3.1.10 Compare</a><br>
  <a href="#I-JDT">
  3.2 Java Development Tools (JDT)</a><br>
  <a href="#I-PDE">
  3.3 Plug-in Development Environment (PDE)</a></p>
</blockquote>
<p>Note: Bug numbers refer to the Eclipse project bug database at <a href="http://dev.eclipse.org/bugs/">http://dev.eclipse.org/bugs/</a></p>
<h3>3.1 <a name="I-Platform">Platform</a></h3>
<h4> Problems in Korean
translation on GTK 2.2.0 (Linux GTK only)</h4>
<p>Users who download and compile new versions of GTK, for example to gain
DBCS support in GTK 2.2.0 on RedHat 8.0, will encounter the following problems
using the Korean translation. Some of the text font may get clipped at the top,
or windows may resize out of the viewable area. To circumvent this problem, we
recommend setting a high screen resolution, for example 1280x1024, and setting
the Dialog Font and Banner Font to a gothic font. The latter can be done in the <b>Workbench
&gt; Fonts</b> preference page. In addition, in the Properties view, the
expand/collapse control (&quot;+&quot;/&quot;-&quot;) has no effect. The
workaround is to use the arrow keys instead: Left Arrow to collapse, Right Arrow
to expand. (bugs <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=38604">38604</a>
and <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=38598">38598</a>).</p>
<h4> Eclipse process does not
exit (HP-UX only)</h4>
<p>On HP-UX, the HP JVM process that runs the Eclipse Workbench does not
terminate upon closing the workbench. The remedy is to always pass the <code>-XdoCloseWithReadPending</code>
to the VM via the Eclipse launcher command line; that is, launch Eclipse with
the command line:</p>
<blockquote>
  <p><code>eclipse -vmargs -XdoCloseWithReadPending</code></p>
</blockquote>
<p>(bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18321">18321</a>)</p>
<h3>3.1.1 <a name="I-Platform-Core">Platform - Core</a></h3>
<h4>Eclipse fails to start on some file systems</h4>
<p>Java sometimes has difficulty detecting whether a file system is writable. In
particular, the method java.io.File.canWrite() appears to return true in
unexpected cases (e.g., using Windows drive sharing where the share is a
read-only Samba drive). The Eclipse runtime generally needs a writable
configuration area and as a result of this problem, may erroneously detect the
current configuration location as writable. The net result is that Eclipse will
fail to start and depending on the circumstances, may fail to write a log file
with any details. To work around this, we suggest users experiencing this
problem set their configuration area explicitly using the -configuration command
line argument. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67719">67719</a>)</p>
<h4>XML files with UTF-8 byte order mark fail to have content type detected</h4>
<p>Eclipse will fail to detect the proper content type for XML files that have a
UTF-8 byte order mark if Crimson is the XML parser (as it is on Sun 1.4 JRE). This
problem will prevent actions normally available when files of the affected
content types are selected from being presented to the user. The workaround is
to ensure the default XML parser supports UTF-8 BOMs (such as Xerces does). (bug
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67048">67048</a>)</p>
<h4>No branding with old config.ini</h4>
<p>If you have an old config.ini file and use it with a new Eclipse build, you
may not get the correct product branding. This is because the id of the standard
Eclipse product changed. Users in shared install scenarios may end up in this
situation as previous builds of Eclipse automatically generated config.ini files
in some cases. The work around is either to delete the local config.ini or
update the eclipse.product line to read eclipse.product=org.eclipse.platform.ide.</p>
<h4><b>Changing the character encoding for a resource causes inconsistencies</b></h4>
<p>Changing the character encoding for a resource (or the whole workspace) does not trigger resource change events or auto builds. The result is that 
builders and listeners that maintain state derived from the affected resources will not have a chance to run, causing
inconsistencies (such as compiler errors not going away and searching for references not working properly).
To avoid the problem, create the project and set its character encoding before creating (or
importing) any files in it. However, if you do need to make a project consistent
again, try the following steps (in order):</p>

<ol>
  <li>Close all projects.</li>
  <li>Exit Eclipse.</li>
  <li>Restart Eclipse.</li>
  <li>Re-open all projects.</li>
  <li>Project &gt; Clean all projects.</li>
</ol>
<p>
(bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=59899">59899</a>,
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67884">67884</a>).</p>

<h4><b>Invalid characters
in install directory prevents Eclipse from starting</b></h4>
<p>Eclipse will fail to launch if installed in a directory whose path
contains certain invalid characters, including :%#&lt;&gt;&quot;!. The
workaround is to install Eclipse in a directory whose path does not contain
invalid characters. (bugs <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3109">3109</a>
and <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17281">17281</a>)</p>
<h4>Problems with
classloaders in created threads</h4>
<p>There is a known issue with trying to load classes from a newly-created
thread using a class loader different from the plug-in class loader. The result
will be a <code>ClassNotFoundException</code>. As a workaround, do the
following:</p>
<ol>
  <li>Create a thread in which to run your code.
  <li>Send yourThread.setContextClassLoader(yourClassLoader); // you can find
    your classloader by grabbing a class it loaded (YourPluginClass.class.getClassLoader())
  <li>Run your code in the newly created thread.</li>
</ol>
<p>If you set the context class loader for the current thread, you are
competing with other users of the thread (all of Eclipse), so the results will
be unpredictable. However, there should be no problem in practice provided you
reset the context class loader back to its original value when your use in the
current thread is&nbsp;complete. (bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8907">8907</a>)</p>
<h4> Deadlock creating executable
extension in Plugin.startup</h4>
<p>If <code>Plugin.startup</code> code is too complex and performs tasks such
as creating an executable extension, a deadlock situation can be created. Only
simple bookkeeping tasks should be performed in <code>Plugin.startup</code>
code. (bugs <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=12827">12827</a>,
<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5875">5875</a>)</p>
<h3>3.1.2 <a name="I-Platform-Ant">Platform - Ant</a></h3>
<h4>UTF-8 encoded buildfiles with Byte Order Mark</h4>
<p>UTF-8 encoded buildfiles with byte order marks will fail to be parsed correctly depending on the XML parser being used for the build. Therefore a valid buildfile will fail to build with an error message similar to: "BUILD FAILED: C:\workspace\bom.xml:1: Document root element is missing.". To succeed in building with these files, ensure to include Xerces jars on the Ant runtime classpath so that the Xerces parser is used to parse the XML. As well the context menu for these files in the Navigator or Package Explorer will not have the run shortcuts for Ant builds. (bug
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67048">67048</a>)</p>
<h4> Custom Ant tasks and Ant
types must be separate from plug-in library JARs</h4>
<p>Including the class files for custom Ant tasks or Ant types in the regular
code JAR for your plug-in causes problems. These class files must be provided in
a separate JAR that is contributed to the <code>org.eclipse.ant.core.antTasks</code>
or <code>antTypes</code> extension point (and not declared as a library in the
plug-in's manifest). This ensures that the Ant tasks and types are loaded by the
special Ant class loader and not by a plug-in classloader. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34466">34466</a>).</p>
<h4> Concurrent Ant builds not
supported</h4>
<p>Eclipse runs Ant in the same JVM as the rest of Eclipse. Several aspects
of Ant and its use of global Java resources (such as System.out and System.err),
make it unsafe to run more than one Ant build concurrently. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24129">24129</a>).</p>
<h4> Running certain Ant tasks
cause memory leakage</h4>
<p>Certain Ant tasks are known to leak memory. Please see the bug report for
details, patches, and possible workarounds. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24448">24448</a>)</p>
<h4> Tasks that require input
lock up workspace</h4>
<p>As with using Ant from the command line, prompts for input from the
console is not handled. This is not the same as making use of the &lt;input&gt;
task, which works correctly within Eclipse. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21748">21748</a>)</p>
<h4>No input handler supplied for &lt;input> task when running Ant in a separate VM</h4>
<p>By default, no input handler is supplied for the &lt;input> task for a build running in a separate VM. Therefore the input requests will always fail. The user can supply an input handler using the -inputhandler argument. (bug
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=45484">45484</a>)</p>
<h4>&quot;version&quot; property is always set when running Ant in the same VM as Eclipse</h4>
<p>The Xalan libraries set system properties including a version property. These get set as properties within the Ant build and therefore the "version" property cannot be set within an Ant buildfile due to the immutable nature of Ant properties. This property will always be set to "2.4.1" for Ant builds in the same VM as Eclipse. (bug
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=45717">45717</a>)</p>
<h4>XDoclet support from within Eclipse</h4>
<p>Since there are differences when running Ant from the commandline and within Eclipse, some extra steps may be needed to have XDoclet support function correctly within Eclipse. Problems may occur creating XDoclet subtasks. The workarounds and full discussion can be found in bug report. (bug
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=37070">37070</a>)</p>
<h4>Ant Editor code completion based on Ant 1.6.1</h4>
<p>Code completion provided by the Ant editor does not respect the user-specified version of org.eclipse.ant.core plug-in or ANT_HOME. Code completion proposals are always based on Ant 1.6.1 (bug
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=30886">30886</a>)</p>
<h4> Eclipse can hang due to implementation of the Ant &lt;property> task (Windows 9X
only)</h4>
<p>On Windows 9X, using:&lt;property environment="env"/> will cause Eclipse to hang if the build occurs in the same VM as Eclipse. Running the build in a separate VM will hang the build but not Eclipse.
(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44196">44196</a>)</p>
<h3>3.1.3 <a name="I-Platform-Help">Platform - Help</a></h3>
<b>
<h4>Help browser tool bar buttons do not work for some documents</h4>
</b>
<p>The Help browser's Print, Synchronize, and Bookmark buttons do not work for
pages that are not actually installed with the product. However, you can always
use the print command in the browser's context menu to print the page you're
reading. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44216">44216</a>)</p>
<h4> Help documents not displayed
in a browser or very slow document loading (Windows only)</h4>
If your LAN settings are not properly configured for local host access, your
Help browser might open to a blank page or display an HTTP error instead of a
help page, or you may experience long delays when loading help documents. Your
system administrator can configure your LAN settings so that help documents can
be accessed from the local help server.
<blockquote>
  <ol>
    <li>In the Control Panel, open <b>Internet Options</b>, select the <b>Connections</b>
      tab and choose <b>LAN Settings</b>.
    <li>If your host was configured to use DHCP for IP assignment, make sure
      that the &quot;Automatically detect settings&quot; check box is cleared.
    <li>If you use a proxy server, ensure that the &quot;Bypass proxy server
      for local addresses&quot; is selected.
    <li>In &quot;Advanced&quot; settings for proxies, add
      &quot;127.0.0.1;localhost&quot; to the &quot;Exceptions&quot; if these
      addresses are not listed.
    <li>If you are using an automatic configuration script for proxy
      settings, and are not sure that the script is correct, clear the &quot;Use
      automatic configuration script&quot; check box.</li>
  </ol>
</blockquote>
<p>If the above steps do not fix your problem, try changing the port and host
properties on the <b>Help &gt; Help Server</b> preference page. In general,
setting <code>host</code> to <code>localhost</code> or <code>127.0.0.1</code>
should work. Also, especially when running a firewall, you may want to specify
port 80 or some other firewall-friendly value. (bugs <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=7036">7036</a>,
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9418">9418</a>, <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11394">11394</a>)</p>
<h4> Working disconnected from
the network (Windows only)</h4>
If you are experiencing problems when not connected to the network, you must
install the loopback adapter from the Windows installation CD. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=831">831</a>)
<h4> Using Internet Explorer in
offline mode (Windows only)</h4>
If you have been using Internet Explorer in Offline mode, when you access the
help system you will get a message indicating that the web page you requested is
not available offline or a blank page will display. Click <b>Connect</b> or
deselect &quot;Work Offline&quot; in the Internet Explorer &quot;File&quot; menu
to return the system behavior to normal.
<h4>Help topics not highlighted in High Contrast mode (Windows only)</h4>
<p>Windows High Contrast settings are not consistently picked up by Internet
Explorer when they are set from the Accessibility Options utility as opposed to
when they are set using the predefined schemes. On Windows XP, it is recommended
to set High Contrast as follows: Right click the desktop, chose properties,
select Windows Classic style from the Windows and buttons drop down on the
Appearance tab, and choose your scheme (for example High Contrast Black) from
Color Scheme drop down. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28609">28609</a>)</p>
<b>
<h4>Help browser displays a blank page</h4>
</b>
<p>If you see a help launched with a blank page, and no errors displayed, it can
be caused by a conflict between libraries in org.eclipse.tomcat plug-in and jars
optionally installed in JRE jre/lib/ext directory. To fix the problem, ensure
that the JRE used for running Eclipse does not contain any J2EE or Apache jars
in the jre/lib/ext directory. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=63970">63970</a>)</p>
<h3>3.1.4 <a name="I-Platform-UI">Platform - UI</a></h3>
<h4>High contrast settings</h4>
<p>Eclipse was tested for High Contrast using 1162 x 864 resolution in Windows
XP High Contrast mode. You can select this mode by selecting Accessibility
Options &gt; Display &gt; Use High Contrast from the Windows XP Control Panel
menu.</p>
<h4>File system import loses file permissions (Unix-based platforms)</h4>
<p>Importing files into a project using the <b>Import &gt; File System</b> wizard
strips the execute permission from executable files. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=25387">25387</a>)</p>
<h4>Closing zoomed editors hides other editor areas</h4>
<p>If you split the editor area into two areas, zoom an editor and then close it,
it is possible for that the second area will be covered by the first. This can be worked around by zooming the visible editor and then unzooming it.
(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66974">66974</a>)</p>
<h4>Problems customizing colors and fonts in non-default themes</h4>
<p>If you are using a theme other than the default, a bug prevents you from
customizing fonts and
colors other than those that happen to have been overridden in the theme definition.
There is no such limitation with the default theme. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67221">67221</a>)</p>
<h4>Problem mixing dynamic and static pages within intro configs</h4>
<p>The Intro support has the concept of dynamic and static pages. Dynamic pages
are described using the intro config XML content and static pages are HTML files
either local or remote. An intro config has the notation of being static or
dynamic, this is determined by the type of home page specified in the intro
presentation. The current implementation only allow dynamic pages to be used
within a dynamic intro and static pages within a static intro, i.e. they are
mutually exclusive.</p>
<p>To workaround this problem when using a dynamic intro, a dynamic page can use
the &lt;html&gt; element with the &quot;type&quot; attribute set to inline. This
will include a static HTML file in the dynamic page (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=68490">68490</a>)</p>
<h4> Default text file encoding
may be detected incorrectly (Windows XP/2000 only)</h4>
<p>The &quot;Text file encoding&quot; value displayed in the Preferences
dialog under &quot;Editors&quot; may be wrong on platforms running Windows XP
(or 2000) when the user locale and system locale differ.&nbsp;</p>
<p>Example of the manifestation of the bug: A Japanese user using Japanese
Windows 2000 works in New York, United States. The user has selected English
(United States) as the user locale. The &quot;Text file encoding&quot; value
displayed by Eclipse is incorrect: &quot;Cp1252&quot; (English). It should
display the system locale &quot;MS932&quot; (Japanese).</p>
<p>Workaround: The user can modify the user locale so that user locale and
system locale are identical. In the example above, this means the user should
set Japanese as the user locale. Then restart Eclipse. The &quot;Text file
encoding&quot; value will then be correct: &quot;MS932&quot; (Japanese).</p>
<p>For Windows XP:</p>
<ul>
  <li>To check the system locale: Open the Control Panel. Go to Regional and
    Language Options. Switch to the Advanced tab. The system locale is specified
    in &quot;Language for non-Unicode programs&quot;.
  <li>To change the user locale: Open the Control Panel. Go to Regional and
    Language Options. The user locale can be modified by changing the language
    in &quot;Standards and formats&quot;.</li>
</ul>
<p>For Windows 2000:</p>
<ul>
  <li>To check the system locale: Open the Control Panel. Go to Regional
    Options. Look up the items in the General tab, inside the &quot;Language
    settings for the system&quot; group. The system locale is the item marked as
    (Default).
  <li>To change the user locale: Open the Control Panel. Go to Regional
    Options. The user locale can be modified by changing the location in
    &quot;Settings for the current user&quot;.</li>
</ul>
<p>(bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=20641">20641</a>)</p>
<h4> Dirty state not tracked
properly for OLE documents (Windows only)</h4>
<p>The dirty state for an OLE document is not updated properly. This causes
Eclipse to prompt to save the contents of the editor when the document is
closed, even if the contents have already been saved. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=2564">2564</a>)</p>
<h4> OLE document crashes can
cause Eclipse to also crash (Windows only)</h4>
<p>If an OLE document crashes, Eclipse can crash, or the workbench menus can
become inconsistent.</p>
<h3>3.1.5 <a name="I-Platform-Text">Platform - Text</a></h3>
<h4>Problems opening external files</h4>
<p><b>File &gt; Open External File</b> can fail when the editor opened for the external
file (as determined by <b>Workbench &gt; File Associations</b> preferences) cannot not deal with
external files. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58179">58179</a>)</p>
<h4>Text editors does not show vertical ruler for external files</h4>
<p>A text editor opened on a file external to the workspace does not show a vertical ruler.
So if you set breakpoints in the file, you won't see the breakpoints in the
editor (the breakpoints only show up in the Breakpoints view). (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=54900">54900</a>)</p>
<h3>3.1.6 <a name="I-Platform-SWT">Platform - SWT</a></h3>
<h4>Eclipse plug-in based on the SWT Browser throws exception</h4>
<p>The SWT Browser widget uses a platform-specific web browser to render HTML.
The org.eclipse.swt.SWTError exception (&quot;No more handles&quot;) is thrown
on platforms that don't meet the requirements for running the Browser widget.
Supported platforms and prerequisites are listed on the SWT FAQ item <a href="http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/platform-swt-home/faq.html#browserplatforms">&quot;Which
platforms are supported by the SWT Browser?&quot;</a>.</p>
<h4>Eclipse crashes on RedHat Linux 9 (GTK+ only)</h4>
<p>Users of the Bluecurve theme shipped with RedHat Linux 9 may experience problems running Eclipse.  
These problems may include crashes or reduced performance.
(bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=38305">38305</a>, <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67906">67906</a>, <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=37683">37683</a>, <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58738">58738</a>)</p>
<p>We recommend changing to a different theme.
Under GNOME, open RedHat Menu > Preferences > Theme.  Select a theme other than Bluecurve.  All applications should update at this point.
Under KDE, open RedHatMenu > Run Command...  And then type in "gnome-theme-manager" and click "Run".  Select a theme other than Bluecurve.  The selection may jump to "Custom Theme" afterward; this is normal, and happens because the GNOME window manager is not running.  All GTK+ applications should update to the new theme at this point.
</p>
<h4>Eclipse hangs when pasting from an unresponsive application (GTK only)</h4>
<p>If the application that is supplying the clipboard material is unresponsive,
the paste operation hangs Eclipse for several minutes. This situation can be
encountered when copying from an Eclipse target workbench, suspending the target
workbench at a breakpoint and pasting into the hosting Eclipse workbench. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=44915">44915</a>)</p>
<h4>Drag and drop on Mac (Mac OS X Carbon only)</h4>
<p>The Mac OS X Carbon implementation of SWT does not support dragging from an SWT application to another application. (bug
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=68212">68212</a>)</p>
<h4>Components in SWT_AWT are not displayed (Motif only)</h4>
<p>On Motif systems (verified on Linux and Solaris) problems have been reported
by some developers in the support for embedding AWT widgets within SWT layouts.
These can range from the AWT widgets not being properly displayed to Java VM
crashes. The cause(s) of these problems has not yet been determined. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=68353">68353</a>)</p>
<h4>Can't expand/collapse TableTree item with mouse (GTK only)</h4>
<p>Under certain conditions and on certain versions of GTK, TableTree items,
such as those found in Property Sheets, cannot be expanded or collapsed using
the mouse. The workaround is to use the right and left arrow keys. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=38855">38855</a>)</p>
<h4> Unable to drag data between
applications in simplified Chinese locale (Motif only)</h4>
<p>When configured for the simplified Chinese locale, it is not possible to
drag data between applications running on the Motif window system. This is a
known limitation of the Open Motif library. (bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=29777">29777</a>)</p>
<h4> Crash when attempting to
launch file browser (AIX Motif only)</h4>
<p>There is a known AIX graphics bug affecting certain levels of AIX
releases. Ensure that the AIX install includes the necessary service updates as
described in the &quot;Install notes/requirements for Eclipse on AIX&quot;
attachment to the Eclipse bug report. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34524">34524</a>)</p>
<h4> Available colors on 8-bit
Linux (Linux only)</h4>
<p>Typically, in Gnome Linux installs running with 8-bit visuals (i.e. 256
color mode), before the Eclipse application is started there are no free colors.
This may mean that Eclipse is unable to allocate the default widget background
color, causing it to display a white background. The functionality, however, is
otherwise unaffected.</p>
<h4> List and ComboBox on Windows
NT (Windows NT only)</h4>
<p>On Windows NT only, you should avoid creating items in a <code>List</code>
or <code>ComboBox</code> with strings longer than 1000 characters. Doing so may
result in a General Protection Fault. This has been fixed in more recent
versions of Windows.</p>
<h4> Excessive CPU
consumption&nbsp; (Linux GTK only)</h4>
<p>When using Linux GTK 2.2.1, there are some scenarios where the CPU usage
goes to 100% for no good reason. When this occurs, resizing or closing the
dialog seems to return the CPU usage to normal. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35443">35443</a>)</p>
<h4>IME-related crash (Linux
Motif only)</h4>
<p>When using Linux Motif and GB18030 IME &quot;chinput&quot;, Eclipse can
crash if the IME client window is left open when the parent window is disposed.
(bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32045">32045</a>)</p>
<h4> Using IBM J9 VM (Photon and
AIX)</h4>
<p>On QNX Photon and IBM AIX, the SWT library will not be found when running
with an IBM J9 1.5 VM. This is a bug in the IBM J9 class library in version 1.5.
You can workaround this problem by adding the SWT library directory to your
LD_LIBRARY_PATH environment variable.</p>
<h4> Missing permissions for SWT
native libraries in workspace (HP-UX only)</h4>
<p>When retrieving the SWT Motif fragment into an Eclipse workspace, the
permissions of the native libraries are reset. This creates a problem on HP-UX
because shared libraries need to have execute permission. Attempting to
self-host with this fragment throws an UnsatisfiedLinkError...Permission Denied
error. You must manually change the permissions to make these libraries
accessible (assume the workspace is at <code>/workspace</code>):</p>
<blockquote>
  <blockquote>
    <p><code>cd /workspace/org.eclipse.swt.motif/os/hpux/PA_RISC<br>
    chmod 555 *.sl</code></p>
  </blockquote>
</blockquote>
<p>(bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=20305">20305</a>
describes a related problem)</p>
<h3>3.1.7 <a name="I-Platform-Team-CVS">Platform - Team - CVS</a></h3>
<p>The following are known problems with the CVS repository provider only, and
do not apply to other repository providers. Additional information on how to use
CVS from Eclipse can be found in the <a href="http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/platform-vcm-home/docs/online/cvs_features2.0/cvs-faq.html">Eclipse
CVS FAQ</a>.</p>
<h4> CVS server compatibility</h4>
<p>The CVS plug-in parses messages returned from the CVS server. If the format
of these messages is not as expected, some of the plug-in's functionality may be
missing. The CVS plug-in is compatible with all stable 1.11.X builds of the CVS
server, and should be compatible with future releases in that stream unless text
message formats change (the last tested server was 1.11.16). As for the 1.12.X
feature releases of CVS, the Eclipse CVS client has been tested with builds up
to 1.12.8. However, future releases could easily break the Eclipse CVS client.
Basic functionality, such as Checkout, Commit, and Update, should always work,
but there may be problems with more advanced commands such as Synchronizing and
Browsing the repository. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67627">67627</a>)</p>
<h4>Cached authorization information lost when workspace is upgraded</h4>
<p>The Platform's internal authorization database file location has changed for
3.0. Because of this, authorization information cached with a workspace created
with an earlier version of Eclipse will be unusable, and the user will need to
re-authenticate.</p>
<h4>Issues upgrading from 2.x to 3.0</h4>
<p>In 2.x, CVS used markers to identify outgoing additions and outgoing
deletions. In 3.0, these markers no longer exist because the Synchronize view
can be used to show the same information. If CVS markers exist in a workspace
that is upgraded to 3.0, they can be removed by performing a Project&gt;Clean.
(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=40593">40593</a>)</p>
<h4>Issues upgrading from 1.0 to 3.0</h4>
<p>In 1.0, CVS used a .vcm_meta file to store project configuration information.
In 2.0, this file was replaced by the .project file but CVS still read the
.vcm_meta file for backwards compatibilty. In 3.0, the .vcm_meta file is no
longer read by CVS. Users who wish to upgrade from 1.0 to 3.0 must first upgrade
to 2.x and then upgrade to 3.0 if they wich to keep there project configuration
information (e.g. java project). (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=43296">43296</a>)</p>
<h4>Connection cannot be found after initially missing</h4>
<p>If a connection initially fails due to a network problem, the connection may
continue to fail even when the network problem is fixed. In order to establish
the connection you must exit and restart Eclipse. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9295">9295</a>)</p>
<h4>CVS meta-folders appear in some cases</h4>
<p>There are some cases where CVS folders are not hidden from the UI as the user
would expect. For instance, CVS folders will appear if a user imports a CVS
project into Eclipse before the CVS plug-in is loaded. To avoid this, open the
CVS Repositories view (thus loading the CVS plug-in) before importing CVS
projects into Eclipse. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21128">21128</a>)</p>
<h4>&quot;Received broken pipe signal&quot; error from server</h4>
<p>Eclipse sometimes performs multiple commands within a single connection to
the server. This may cause problems with CVS servers that are running server
scripts in response to certain commands. (bugs <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23575">23575</a>
and <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=23581">23581</a>)</p>
<h4>&quot;Terminated with fatal signal 10&quot; error from server</h4>
<p>There is a bug in the CVS server related to some compression levels. If you
get this error, changing the compression level on the CVS preference page may
help. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=15724">15724</a>)</p>
<h4>&quot;Unknown response&quot; error using ext connection method</h4>
<p>There are a few situations that can result in an &quot;Unknown response&quot;
error messages when using the ext connection method. One situation involves
using an external communications client (e.g. rsh or ssh) that adds CRs to the
communications channel (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21180">21180</a>).
Another involves Eclipse not properly reading the stderr output of the external
communications tool. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=11633">11633</a>)</p>
<h4>No way to update folder excluding subfolders</h4>
<p>There is currently no way in Eclipse to run a non-recursive update on a
folder (i.e., there is nothing equivalent to the cvs -l option). (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33210">33210</a>)</p>
<h4>A disabled CVS capability may not be auto-enabled in existing workspaces</h4>
<p>New in 3.0 is the ability to disable capabilities and the CVS support in
Eclipse can be disabled. However, for backwards compatibility the CVS capability
is auto-enabled in existing workspaces that already contain CVS projects. The
auto-enabling function may not run if the team support plugin is not loaded at
startup. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66977">66977</a>)</p>
<h4>Builder output files may appear as changed</h4>
<p>When folders containing build output are shared they may get improperly
marked as dirty when build output is generated. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=50965">50965</a>)</p>
<h3>3.1.8 <a name="I-Platform-Install-Update">Platform - Install/Update</a></h3>
<h4>Manually installing features and plug-ins on a FAT file system (Windows only)</h4>
<p>When features and plug-ins are manually installed on top of an Eclipse-based
product install located on a FAT file system that has already been run at least
once, the product must be explicitly restarted with the system property
osgi.checkConfiguration set to true. This property can be set in the
eclipse/configuration/config.ini file, or passed to the eclipse command line via
the -vmargs option. For example, restart with the following command: eclipse.exe
-vmargs -Dosgi.checkConfiguration=true. Then, open Help &gt; Software Updates &gt; Manage
Configuration dialog and toggle on the &quot;Show disabled features&quot; button
its toolbar. Select the newly &quot;installed&quot; feature and press on the
&quot;Enable feature&quot; action on the right pane (or select the action from
the feature's context menu). (bugs <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=52525">52525</a>,
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66120">66120</a>, <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67461">67461</a>)</p>
<h4> Non-responsive sites may use
all free threads</h4>
<p>Prior to Eclipse 2.1, if the connection to an update site did not respond
(the site did not exist or was down), the workbench became non-responsive until
the connection request timed out. Since 2.1, connections are made by a separate
thread so that the UI stays responsive. Typically, unresponsive connections
eventually time out and these threads terminate. In rare cases, servers accept
the connection but never send a response, thereby keeping the connection thread
live indefinitely. Update manager limits the number of active connection threads
and will refuse to create more once the limit is reached. To work around the
problem, exit and restart Eclipse. (bugs <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18598">18598</a>,
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19775">19775</a>)</p>
<h4> URL validity checking on
input</h4>
<p>URL syntax is currently not completely checked on input. Ensure that the
entered URL uses forward&nbsp; slash ('/') separators and does not contain
invalid characters. (bugs <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19685">19685</a>,
<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20247">20247</a>)
<h3>3.1.9 <a name="I-Platform-Debug">Platform - Debug</a></h3>
<p>None. (Known problems with the Java debugger appear below in the <a href="#I-JDT">JDT</a>
section.)</p>
<h3>3.1.10 <a name="I-Platform-Compare">Platform - Compare</a></h3>
<p>None.</p>
<h3>3.2 <a name="I-JDT">Java Development Tools (JDT)</a></h3>
<h4>Searching for constant field references</h4>
<p>Search does not find references to constant fields inside binaries because
the Java Language Specification mandates that constant field values be inlined
in the class file's bytecodes, leaving no trace of a field reference.&nbsp;(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=12044">12044</a>)</p>
<h4>Developing programs with J2SE 1.5</h4>
<p>The Java tools do not yet fully support J2SE 1.5. You can run or debug programs against
a 1.5 JRE, and safely compile 1.4 programs against 1.5 libraries (the Eclipse compiler tolerates
them with the
exception of covariance scenarios which are forbidden byJava Language Specification (JLS) 2nd edition).
However, the Eclipse Java compiler and IDE are unable to handle source files
containing uses of any of the new Java language features being added in 1.5 (generics, enhanced for loops, static
imports, metadata annotations, varargs), which will be
codified in the forthcoming JLS 3rd edition. An
early preview of the full Eclipse support for J2SE 1.5 developed in parallel
with 3.0, and is available from the <a href="http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/jdt-core-home/r3.0/main.html#updates">Cheetah</a>
page.&nbsp;(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=36938">36938</a>)</p>
<h4>Missing secondary types in editor</h4>
<p>When referencing a secondary type defined in another compilation unit (i.e., a
top level type whose name does not match its file name), the editor may
incorrectly report it to be missing. The Java compiler handles this case fine.
(bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=32505">32505</a>)</p>
<h4>Java indexing crash recovery</h4>
<p>The Java indexer analyzes modified Java files in the background. If the indexer
happens to crash (which it can under rare circumstances), it will automatically recover
and rebuild the affected indexes. If this happens, it adds an informative entry
to the .log file to. The rebuilt indexes are fine, and the crash does not impact
subsequent search
operations. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66836">66836</a>)</p>
<h4>Classpath entry denoting external class folder is now properly rejected</h4>
<p>Although external class folders (i.e., folder containing .class files and located
outside workspace) were never properly supported by the JDT, a problem was never
reported
when constructing such a build path. JDT now properly diagnoses a problem in
this situation. In order to still benefit from external .class files, a
class folder must be mounted as a linked folder in Eclipse workspace (in project
properties, select Java Build Path &gt; Libraries &gt; Add Class Folder &gt; Create
New Folder... &gt; Advanced. Then a folder name can be associated with an
arbitrary file system location by checking &quot;Link to folder on the file
system). Once mounted, the linked class folder can normally be referenced on a
build path, and from there on programs can be compiled against it. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67631">67631</a>)</p>
<h4>Package Explorer not asking for filter removal</h4>
<p>Show In &gt; Package Explorer normally asks for removal of filters when the
compilation unit to be shown in the Package Explorer is filtered out. However,
this currently is not happening if only a single filter is selected. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67814">67814</a>)</p>
<h4>Hierarchical layout and inclusion filters</h4>
<p>Packages explicitly included on the build path using inclusion filters will
not be visible in either the Package Explorer or Packages views when the views
are set to hierarchical layout mode. Use the flat layout mode when using inclusion
filters. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65240">65240</a>)</p>
<h4>Problems after moving a compilation unit</h4>
<p>Moving a compilation unit can cause an editor open on that file to behave
strangely. Closing and re-opening the editor fixes the problem. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67046">67046</a>)</p>
<h4>Stale spell check errors</h4>
<p>Adding a new word to the spell checking dictionary does not correct the
corresponding spelling errors. The spelling errors do go away the next time you
change the file's content. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=68282">68282</a>)</p>
<h4> Javadoc hover in the Java
editor</h4>
<p>The Javadoc hover help shown when hovering over identifiers in the Java
editor does not handle links inside of Javadoc comments properly. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20644">20644</a>)</p>
<h4> Cut, copy, paste not working
for linked resources in views showing Java elements</h4>
<p>The cut, copy, and paste actions do not work for linked files and folders
appearing in views that show Java elements, including the Package Explorer. The
workaround is to use these actions from the Navigator view instead. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=34568">34568</a>)</p>
<h4> Java working sets not
working correctly for elements from JRE system library container</h4>
<p>Appling a working set consisting entirely of elements from the JRE System
library container as a filter to the packages view might result in an empty
Package Explorer. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35395">35395</a>)</p>
<h4> Cannot generate Javadoc for
packages with GB18030 characters in the name</h4>
<p>Most class libraries do not properly support the creation of a system
process (via <code>java.lang.Runtime.exec(...)</code>) when the specified
command line contains GB18030 characters. Since Javadoc is created using the
Javadoc executable provided with the JDK, generating Javadoc fails if the
package or class name contains GB18030 characters. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=32215">32215</a>)</p>
<b>
<h4>Side effects of Step into Selection and Run to Line</h4>
</b>
<p>The actions &quot;Step into Selection&quot; and &quot;Run to Line&quot;
optimistically set breakpoints on the line the user has chosen to step into or
run to. However, the debugger can not determine if or when execution will ever
reach the chosen line. The breakpoints set by the underlying implementation are
not visible to the user and can cause execution to suspend unexpectedly at a
later time, when the associated line is actually executed. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=51507">51507</a>)</p>
<b>
<h4>Default locale initialization incorrect</h4>
</b>
<p>The default locale is generally initialized from the settings in the
operating system when a target VM is launched. However, when using javaw.exe on
JDK1.4.2, Windows XP, the default locale is incorrectly initialized to en_US, no
matter what the operating system settings are. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65945">65945</a>)</p>
<b>
<h4>Suspend on uncaught exception overrides exception breakpoint location filters</h4>
</b>
<p>Exception breakpoints can be configured with location filters (inclusive and
exclusive). When an unchecked exception is configured to <b>not</b> suspend
execution in a specific class, execution will still suspend when the user
preference to suspend on uncaught exceptions is on. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66770">66770</a>)</p>
<b>
<h4>Multiple references to the same object do not update in Variables view</h4>
</b>
<p>When more than one variable references the same object in the Variables view,
only one variable will update while stepping through source code. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=58768">58768</a>)</p>
<h4> Running Java programs with
non-Latin-1 characters in package or class names</h4>
You get a <code>java.lang.NoClassDefFoundError</code> when running Java
programs with non-Latin characters in the package or class names. The workaround
is to package the class files as a JAR file and run the program out of the JAR
and not from the file system directly. (bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4181">4181</a>)
<h4>Cannot run or debug class in
a project with GB18030 characters in project name</h4>
<p>Most class libraries do not properly support the creation of a system
process (via <code>java.lang.Runtime.exec(...)</code>) when the specified
command line contains GB18030 characters. This limitation means the debugger
cannot launch applications when the command line it generates contains GB18030
characters. (bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32206">32206</a>)</p>
<b>
<p>Cannot detect installed JRE with GB18030 characters in path name</p>
</b>
<p>Automatic JRE detection fails when the JRE is stored in a directory
containing GB18030 characters in its name. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=33844">33844</a>)</p>
<h4> Unable to debug stack
overflows</h4>
<p>If a debug session suspends on a <code>java.lang.StackOverflowError</code>
exception (due to an exception breakpoint), the debugger may not be able to
retrieve any debug information from the target JVM. As well, the debugger may
not be able to reliably interact with the target JVM past this point. (bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19217">19217</a>)</p>
<h4> Evaluation limitation</h4>
<p>The debugger uses threads in the target JVM to perform evaluations (both
explicit evaluations that the user requests, and implicit evaluations such as <code>toString()</code>
invocations in the <b>Variables</b> view). The Java Debug Interface (JDI)
requires that the thread in which an evaluation is performed be suspended by a
user event (that is, a breakpoint or step request). Evaluations cannot be
performed on threads suspended by the suspend action. As well, when a breakpoint
is configured to suspend the JVM rather than just the individual thread, the
threads which did not encounter the breakpoint are not in a valid state to
perform an evaluation. When an evaluation is attempted in a thread that is not
in a valid state to perform an evaluation, an error message will appear to the
effect of &quot;Thread must be suspended by step or breakpoint to perform method
invocation&quot;. (bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=34440">34440</a>)</p>
<h4> Missing debug attributes</h4>
The debugger requires that class files be compiled with debug attributes if
it is to be able to display line numbers and local variables. Quite often, class
libraries (for example, &quot;<code>rt.jar</code>&quot;) are compiled without
complete debug attributes, and thus local variables and method arguments for
those classes are not visible in the debugger.
<h4> Using Hot Code Replace</h4>
<p>Hot code replace is supported on JDK 1.4.x VMs, and IBM J9 VMs. The debugger
will attempt to replace all class files that change in the workspace as the user
edits and builds source code. However, hot code replace is limited to changes
that a particular virtual machine implementation supports. For example, changes
within existing methods may be supported, but the addition or removal of members
may not be.</p>
<p>Note that hot code replace and stepping on JDK 1.4.0 VMs was unreliable. The
underlying VM problems were fixed in JDK 1.4.1, and later.</p>
<h4> Scrapbook</h4>
Setting a breakpoint inside a scrapbook page is not supported.
<p>When a snippet is run in the scrapbook which directly or indirectly calls <code>System.exit(int)</code>,
the evaluation cannot be completed, and will result in a stack trace for a <code>com.sun.jdi.VMDisconnectedException</code>
being displayed in the scrapbook editor.
<p>Terminating a scrapbook page while it is performing an evaluation results
in a <code>com.sun.jdi.VMDisconnectedException</code> being displayed in the
scrapbook editor.
<h4> Debugging over slow
connections</h4>
A global Java debug preference specifies the debugger timeout, which is the
maximum amount of time the debugger waits for a response from the target VM
after making a request of that VM. Slow connections may require that this value
be increased. The timeout value can be edited from the <b>Java &gt; Debug </b>preference
page. Changing the timeout value only effects subsequently launched VM, not VMs
that are already running.
<h4> Updating of inspected values</h4>
When inspecting the result of an evaluated expression in the debugger, it is
important to note that the result displayed is the result of that expression at
the time it was evaluated. For example, when inspecting a simple integer counter
(primitive data type), the value displayed in the Expressions view is the value
when the expression was evaluated. As the counter is changed in the running
program, the inspected result will not change (since the view is not displaying
the value bound to a variable - it is displaying the value of an expression, and
the value of a primitive data type cannot change). However, if an expression
results in an object, fields of that object will be updated in the inspector as
they change in the running program (since the value bound to fields in an object
can change).
<h4> Stepping over native methods
that perform I/O</h4>
When the debugger steps over native methods that perform I/O to <code>System.out</code>
or <code>System.err</code>, the output may not appear immediately unless the
native performs a flush on the output buffer.
<h4> VM and process termination
running on IBM 1.3 JVM on Linux (Linux only)</h4>
Terminating a launch, debug target, or system process associated with a debug
target running on the IBM 1.3 JVM on the Linux platform does not work when the
associated debug target has a suspended thread. To remove such debug targets
from the debug UI, select <b>Terminate and Remove</b> from the debug view's
pop-up menu (or use the shortcut &quot;delete&quot; key). Associated system
processes in the OS may not be properly cleaned up. If a debug target has no
suspended threads, termination works properly. (bug <a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1631">1631</a>)
<h3>3.3 <a name="I-PDE">Plug-in Development Environment (PDE)</a></h3>
<h4>Feature manifest editor does not preserve all comments</h4>
<p>When a non-source page of the feature manifest editor is used, PDE will convert
changes back into XML by regenerating the file. Although the overall content and
most of the comments are preserved, some comments may be lost. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=59502">59502</a>)</p>
<h4>Paste does not work in table viewers of the plug-in manifest editor</h4>
<p>When you copy an item in one of the table viewers on the Dependencies,
Extensions or Extension Points pages of the plug-in manifest editor, you will
not be able to paste it. For copy and paste operations, use the source page of
the editor. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=67582">67582</a>)</p>
<h4>PDE will not unzip source zips of some plug-ins</h4>
<p>In the plug-in import wizard, when you choose to import plug-ins as
&quot;projects with source folders&quot;, PDE will not unzip the source for the
org.apache.ant, org.eclipse.osgi.util and org.eclipse.osgi.services. This is
because the source ZIPs contains code that will not compile when unzipped as it
requires additional JARs that are not part of the SDK. To avoid the creation of
plug-in projects that won't compile, PDE will import these plug-ins as binary
and attach source, so you would still be able to read the source, you just won't
be able to modify it. Also, PDE will not unzip the source for the
org.eclipse.swt plug-ins. In this case, it is because, when shipped, the swt
code is spread across a plug-in and a fragment, and when unzipped, it will
require circular dependencies between the plug-in and fragment projects. These
circular dependencies are at minimum marked as warnings by the JDT compiler and
may result in unpredictable build behavior. Therefore, PDE always imports
org.elipse.swt as binary with source attached. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=66314">66314</a>)</p>
<h4>Search for an extension point reference may include a false hit</h4>
<p>It is possible for an extension point search result to include a false hit in
the following specific scenario. If you open the plug-in manifest editor on a
plug-in that contains both a plugin.xml and manifest.mf, go to the Extension
Points page, select one of the extension points and click on 'Find references',
the result may include a false hit. The false hit would result only if another
plug-in in the product had declared an extension point by the same id.
Workaround in this case would be to perform the search through the Plug-in
search page. (bug <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=62177">62177</a>)</p>
<h4> PDE source page colors do
not take effect on Apply</h4>
<p>Changes to the colors PDE uses for source pages of its multi-page editors
are not immediately visible in opened editors after pressing the Apply button
on&nbsp; the <b>Plug-in Development &gt; Editors preference</b> page. To work
around this problem, close the editor and and reopen it. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33640">33640</a>)</p>
<h4> Emacs key bindings do not
work in manifest editor fields</h4>
<p>Non-default key bindings currently do not work in fields on non-source
pages of the PDE manifest editors. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19482">19482</a>)</p>
<h4> Plug-in import wizard does
not allow plug-ins of different versions to be imported</h4>
<p>The Eclipse platform allows two plug-ins with the same ID but different
versions to coexist if the only thing they contribute is run-time libraries.
However, PDE cannot handle these plug-ins because it creates project names using
plug-in IDs during binary project import. (bug <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=18500">18500</a>)</p>
<h2>4. <a name="Running Eclipse">Running Eclipse</a></h2>
<p>After installing the Eclipse SDK in a directory, you can start the Workbench
by running the Eclipse executable included with the release (you also need a 1.4
JRE, not included with the Eclipse SDK). On Windows, the executable file is called <samp>eclipse.exe</samp>,
and is located in the <code>eclipse</code> subdirectory of the install. If
installed at <code>c:\eclipse-SDK-3.0-win32</code>, the executable is <code>c:\eclipse-SDK-3.0-win32\eclipse\eclipse.exe</code>.
<b>Note:</b> Set-up on most other operating environments is analogous. Special
instructions for Mac OS X are listed below.</p>
<p>Depending on the JRE that you are running, the number of plug-ins you are using, and
the number of files you will be working with, you may have to increase the amount of memory that
is available to the Java VM running Eclipse. Eclipse allows you to pass arguments directly to the
Java VM using the
<code>-vmargs</code> command line argument, which must follow all other Eclipse specific arguments.
To increase the available memory, you would typically use:</p>
<blockquote>
  <p><code>eclipse -vmargs -Xmx&lt;memory size&gt;</code></p>
</blockquote>
<p>The <code>&lt;memory size&gt;</code> value should typically be at least
&quot;128M&quot; (128 megabytes).
Usually, &quot;256M&quot; (256 megabytes) is ample. You should
not set this value to be larger than the amount of physical memory on your machine.</p>
<p>When the Workbench is launched, the first thing you see is a 
dialog that allows you to select where the workspace will be located. The
workspace is the directory where your work will be stored.
If you do not specify otherwise, Eclipse creates the workspace
as a sibling of the executable (that is, at <code>c:\eclipse-SDK-3.0-win32\eclipse\workspace</code>).
This workspace directory is used as the default content area for your projects
as well as for holding any required metadata. For shared or multi-workspace
installs you must explicitly specify the location for your workspace using the
dialog (or via the &quot;<code>-data</code>&quot; command line argument).</p>
<p>Here is a typical Eclipse command line:&nbsp;</p>
<blockquote>
  <p><code>eclipse -vm c:\jdk1.4.2\jre\bin\javaw -vmargs -Xmx256M</code></p>
</blockquote>
<p><i>Tip:</i> It's generally a good idea to explicitly specify which Java VM to
use when running Eclipse. This is achieved with the &quot;<code>-vm</code>&quot;
command line argument as illustrated above. If you don't use &quot;<code>-vm</code>&quot;,
Eclipse will look on the O/S path. When you install other Java-based products,
they may change your path and could result in a different Java VM being used
when you next launch Eclipse.</p>
<p>To create a Windows shortcut to an installed Eclipse:</p>
<ol>
  <li>Navigate to <code>eclipse.exe</code> in Windows Explorer and use Create
    Shortcut on the content menu.
  <li>Select the shortcut and edit its Properties. In the Target: field append
    the command
    line arguments.
</ol>
<p>Opening this shortcut launches Eclipse. (You can
drag the shortcut to the Windows Desktop if you want to keep it in easy reach.)</p>
<h3>Mac OS X</h3>
<p>On Mac OS X, you start Eclipse by double clicking the Eclipse application. If you need to pass arguments to Eclipse, you'll have to edit the <code>Info.plist</code> file
inside the Eclipse application bundle: select the Eclipse application bundle icon while holding down the Control Key.
This will present you with a popup menu. Select &quot;Show Package Contents&quot; in the popup menu.
Locate <code>Info.plist</code> file in the <code>Contents</code> subfolder and open it with your favorite text editor.
Add to, remove from or edit the command line options listed at the end of the file for the &quot;Eclipse&quot; key.</p>
<p>If you need to launch Eclipse from the command line, you can use the symbolic link &quot;eclipse&quot; in the
top-level eclipse folder. It refers to the eclipse executable inside the application bundle and takes
the same arguments as &quot;eclipse.exe&quot; on other platforms. Due to a platform limitation you cannot
pass an arbitrary Java VM to the &quot;<code>-vm</code>&quot; option, but must use the program &quot;<code>java_swt</code>&quot; found inside
the application bundle; for example:</p>

<pre>	cd <i>&lt;eclipse directory&gt;</i>
	./eclipse -vm Eclipse.app/Contents/MacOS/java_swt
</pre>
<h2>5. <a name="Upgrading"></a>Upgrading Workspace from a Previous Release</h2>
<h3>Users who don't use &quot;-data&quot;</h3>
<p>If you weren't previously using &quot;-data&quot; to specify your workspace,
follow these steps to upgrade:
<ol>
  <li>Find the workspace directory used by your old version of Eclipse.
    Typically this is located inside the directory in which Eclipse was
    installed in a subdirectory called &quot;<code>workspace</code>&quot;. If
    you are using a shortcut or script to launch Eclipse, then it will be under
    the current working directory of that shortcut or script in a subdirectory
    called &quot;workspace&quot;. For Windows users, this is specified by the
    &quot;Start in:&quot; argument in your shortcut properties.</li>
  <li>Copy this workspace directory to a new, empty location outside of any
    Eclipse install directory.</li>
  <li>Install the new version of Eclipse in a new location, separate from any
    old version of Eclipse.</li>
  <li>If you had installed additional features and plug-ins into your old
    Eclipse, you should re-install them in the new Eclipse.</li>
  <li>Start this new version of Eclipse and select
    this location using the workspace chooser dialog at startup (or use &quot;<code>-data</code>&quot;
    command line argument to pre-select the workspace location).</li>
</ol>
<h3>Users who do use &quot;-data&quot;</h3>
<p>If you were previously using the &quot;<code>-data</code>&quot; argument to
start Eclipse, your upgrade path is much easier:
<ol>
  <li>Optionally copy your workspace directory to a new, empty location outside of any
    Eclipse install directory as a backup.</li>
  <li>Install the new version of Eclipse in a new location, separate from any
    old versions of Eclipse.</li>
  <li>If you had installed additional features and plug-ins into your old
    Eclipse, you should re-install them in the new Eclipse.</li>
  <li>Start this new version of Eclipse and select this location using the workspace chooser dialog at
    startup (or use &quot;<code>-data</code>&quot;
    command line argument to pre-select the workspace location).</li>
</ol>
<p><i>Note:</i> Copying your workspace is recommended because,
after you've upgraded your workspace, you won't be able to use it
again with an older version of Eclipse. If you ever want to go &quot;back in
time&quot; to an earlier release, you will need that backup.</p>
<h2>6. <a name="Interoperability with Previous Releases">Interoperability with
Previous Releases</a></h2>
<h3>6.1 Interoperability of Release 3.0 and 2.1</h3>
<h4>Sharing projects between heterogeneous Eclipse 3.0 and 2.1</h4>
<p>Special care is required when a project in a team repository is being loaded
and operated on by developers using Eclipse-based products based on different
feature or plug-in versions. The general problem is that the existence,
contents, and interpretation of metadata files in the workspaces may be specific
to a particular feature or plug-in version, and differ between versions. The
workspace compatibility guarantees only cover cases where all developers upgrade
their Eclipse workspaces in lock step. In those cases there should be no problem
with shared metadata. However, when some developers are working in Eclipse 3.0
while others are working in Eclipse 2.1, there are no such guarantees.
This section provides advice for what to do and to not do. It addresses the
specific issues with the Eclipse SDK.</p>
<p>The typical failure mode is noticed by the 3.0 user. 3.0 metadata is lost
when a 2.1 user saves changes and then commits the updated metadata files to the
repository. Here's how things typically go awry:</p>
<ul>
  <li>A user working in Eclipse 3.0 creates or modifies a project in a way that
    results in changes to a shared metadata file that rely on 3.0-specific
    information. The user then commits the updated project files, including the
    shared metadata file, to the shared repository.</li>
  <li>Another user working in Eclipse 2.1 shares this project from the same
    repository. The 3.0-specific information in the shared metadata file is not
    understood by Eclipse 2.1, and is generally discarded or ignored without
    warning. The user modifies the project in a way that results in changes to
    the shared metadata file, causing the shared metadata file to be rewritten
    without any of the 3.0-specific information. The user commits the updated
    project files, including the shared metadata file, to the shared repository.
    The user is generally unaware that shared information has just been lost as
    a result of their actions.</li>
  <li>A user working in Eclipse 3.0 picks up the changes to a project from the
    shared repository, including the updated shared metadata file. The user may
    be unaware that they have just taken a retrograde step until later when
    things start to malfunction.</li>
</ul>
<p>Here are a list of things to watch out for when the project is to be shared
between users of Eclipses 3.0 and 2.1:</p>
<ul>
  <li><b>External tool (Ant) builders</b><br>
    Information about external tool builder is recorded in the project's <code>.project</code>
    file. The format of the information changed between 2.1 and 3.0. Builders
    created or changed in 3.0 use the new format, which is not understood by a
    2.1 workspace. Builders created in 2.1 use the old format and continue to
    work in 2.1. Builders from a 2.1 workspace can be viewed in a 3.0 workspace
    in read-only mode. Recommendation: Always create or edit external tools
    builders from a 2.1 workspace.</li>
  <li> <b>Optional inclusion patterns on Java source entries on the build class path</b><br>
    This support was added in 3.0. This information is recorded in the project's
    <code>.classpath</code> file. Recommendation: do not specify inclusion patterns.&nbsp; Better still, disable
    exclusion patterns via the<b> Java
    &gt; Compiler &gt; Build Path</b>&nbsp; preference page.</li>
</ul>
<h4>Using Eclipse 3.0 to develop plug-ins that work in Eclipse 2.1</h4>
<p>It is also possible (and reasonable) to use Eclipse 3.0 to develop a plug-in
intended to work in Eclipse 2.1. Use the <b>Plug-in Development &gt; Target
Platform </b>preference page to locate non-workspace plug-ins in an 2.1 Eclipse
install. This ensures that the code for your plug-in is being compiled and
tested against Eclipse 2.1 APIs, extension points, and plug-ins. (The above list
of concerns do not apply since they affect the layout and interpretation of
files in the plug-in <i>project</i> but none affect the actual deployed form of
the plug-in.)</p>
<hr>
<p>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc.
in the United States, other countries, or both.</p>
<p>IBM is a trademark of International Business Machines Corporation in the
United States, other countries, or both.</p>
<p>Microsoft, Windows, Windows NT, and the Windows logo are trademarks of
Microsoft Corporation in the United States, other countries, or both.</p>
<p>Apple and Mac OS are trademarks of Apple Computer, Inc., registered in the
U.S. and other countries.</p>
<p>QNX, Neutrino, and Photon are trademarks or registered trademarks of QNX
Software Systems Ltd.</p>
<p>Other company, product, and service names may be trademarks or service marks
of others.</p>
<p>(c) Copyright IBM Corp. and others 2004</p>

</body>

</html>
