<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

#*****************************************************************************
#
# template.php
#
# Author: 		Wayne Beaton
# Date:			2006-06-06
#
# Description:
# This page contains pointers to download and tutorial information for
# individuals interested in using Eclipse for Java development.
#****************************************************************************

require_once("links.php");
#
# Begin: page-specific settings.  Change these.
$title 		= "Eclipse Classic";
$pageKeywords	= "eclipse europa java mustang 3.3 matisse windowbuilder j2ee jee enterprise servlet tomcat eclipse resource screencam screen cam tutorial ";
$pageAuthor		= "Wayne Beaton";

# Add page-specific Nav bars here
# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
# $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

# End: page-specific settings
#
	

ob_start();
?>
<link
	rel="stylesheet" type="text/css" href="moreinfo.css" media="screen" />

<div id="fullcolumn">
<div id="midcolumn">
<table cellspacing=0 class="callistoButtons">
	<tr>
		<td width="50"></a></td>
		<td width="100%" class="noRightBorder"><?= $title ?></td>
	</tr>
</table>

<p><img src="../images/classic2.jpg" align="left" style="padding-right: 10px;"/><?= $title ?> is the most recent release from the <a
	href="/eclipse">Eclipse</a> top-level project (it is what has traditionally been
the main download on this site). It contains what you need to build
applications based on Eclipse technology, including integrated
development environments (IDE), and rich client applications using the
Eclipse Rich Client Platform (RCP). The <?= $title ?> provides superior
Java editing with incremental compilation, the Plug-in Development
Environment (<a href="/pde">PDE</a>), complete source code for the
Eclipse <a href="/eclipse">Platform</a>, and much more.</p>


<p>If you are building Eclipse Rich Client applications, consider
<a href="rcp.php"><?= $rcpTitle ?></a></em>.</p>


<div class="homeitem3col">
<h3>What You Need</h3>
	<p><img src="http://www.eclipse.org/downloads/images/update_wiz.gif"
		align="right" />You will need a <a href="<?= $java_runtime ?>">Java
	Runtime Environment</a> (JRE) to run <?= $title ?>. A Java 5 JRE is
	recommended.</p>
	<ul>
		<ul>
			<li><a
				href="<?= $classicDownload ?>"><?= $classicTitle ?></a> (<?= $windows_warning ?>)
				<ul>
					<li><a href="<?= $classOtherDownloads ?>">Other downloads for 3.3.1</a></li>
					<li><a href="http://download.eclipse.org/eclipse/downloads/">All versions</a></li>
					<li><a href="http://archive.eclipse.org/eclipse/downloads/index.php">Archived
						Platform Builds</a></li>
				</ul>
			</li>
			<li>Additional features can be installed from the Europa
			Update Site via the Update Manager, including:
			<ul>
				<li>Ruby Development Tools (<a href="/dltk">DLTK</a>)</li>
				<li>Eclipse Modeling Framework (<a href="/emf">EMF</a>)</li>
				<li>Graphical Editing Framework (<a href="/gef">GEF</a>)</li>
				<li>Test and Performance Tools (<a href="/tptp">TPTP</a>)</li>
				<li>Graphical Modeling Framework (<a href="/gmf">GMF</a>)</li>
				<li>Data Tools (<a href="/datatools">DTP</a>)</li>
			</ul>
			</li>
		</ul>
</div>

<div class="homeitem" style="clear:both;">
<h3>New and Noteworthy</h3>
<div class="content">
<p><?= $title ?>&mdash;built using <a href="/eclipse">Eclipse</a>
3.3&mdash;includes numerous enhancements over previous versions,
including:</p>
<ul>
	<li>Improved debugging support, including hyperlink stepping.</li>
	<li>A new Quick Access feature (ctrl-3) to enhance IDE navigation.</li>
	<li>Support for Mac OSX on Intel and <em>early access</em> support for
	Windows Vista.</li>
	<li>Improvements in Plug-in Development Environment (<a
		href="http://www.eclipse.org/pde/">PDE</a>) to make building RCP
	applications easier.</li>
</ul>
<p>For a list of new features in Eclipse 3.3, check out the <a
	href="<?= $platform_new_and_noteworthy_url ?>">New and Noteworthy</a>.</p>
</div>
</div>

<div class="homeitem" style="clear:none;">
<h3>Tutorials and help</h3>
<div class="content">
<ul>
	<li style="list-style-image: url(images/movie.png)"><a
		href="<?= $movie_install_features_url ?>"><?= $movie_install_features_title ?></a>
	(Adding&nbsp;Ruby&nbsp;Development&nbsp;Tools)</li>
	<li style="list-style-image: url(images/movie.png); border-style: none"><a
		href="<?= $movie_test_first_url ?>"><?= $movie_test_first_title ?></a></li>
</ul>

<h4>Documentation and Newsgroups</h4>
<ul>
	<li style="list-style-image: url(images/document.png)"><a
		href="<?= $user_guide_url ?>">Eclipse User's Guide</a></li>
	<li style="list-style-image: url(images/news.png)"><a
		href="news://news.eclipse.org/eclipse.tools.jdt">Eclipse Java
	development tools Newsgroup</a></li>
	<li style="list-style-image: url(images/news.png)"><a
		href="news://news.eclipse.org/eclipse.platform">Eclipse Platform
	Newsgroup</a></li>
	<li style="list-style-image: url(images/news.png)"><a
		href="news://news.eclipse.org/eclipse.platform.rcp">Eclipse Rich
	Client Platform Newsgroup</a></li>
	<li style="list-style-image: url(images/news.png)"><a
		href="news://news.eclipse.org/eclipse.technology.equinox">Eclipse
	Equinox (OSGi) Newsgroup</a></li>
</ul>

<h4>Suggested reading</h4>
<ul>
	<li
		style="list-style-image: url(images/document.png); border-style: none"><a
		href="/articles">Eclipse Corner Articles</a></li>
	<li
		style="list-style-image: url(images/document.png); border-style: none"><a
		href="/articles/Whitepaper-Platform-3.1/eclipse-platform-whitepaper.html">Eclipse
	Platform Technical Overview</a></li>
	<li style="list-style-image: url(images/book.png); border-style: none"><a
		href="http://www.aw-bc.com/catalog/academic/product/0,1144,032142672X,00.html">Eclipse:
	Building Commercial-Quality Plug-ins</a></li>
	<li style="list-style-image: url(images/book.png); border-style: none"><a
		href="http://www.aw-bc.com/catalog/academic/product/0,1144,0321205758,00.html">Contributing
	to Eclipse: Principles, Patterns, and Plug-Ins</a></li>
	<li style="list-style-image: url(images/book.png); border-style: none"><a
		href="http://www.aw-bc.com/catalog/academic/product/0,1144,0321334612,00.html">Eclipse
	Rich Client Platform: Designing, Coding, and Packaging Java&trade;
	Applications</a></li>
</ul>
</div>
</div>
</div>
</div>

<?php
$html = ob_get_contents();
ob_end_clean();
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $title, $html);
?>