The Eclipse Project Downloads

On this page you can find the latest builds produced by the Eclipse Project. To get started, run the program and go through the user and developer documentation provided in the help system or see the web-based help system. If you have problems installing or getting the workbench to run, check out the Eclipse Project FAQ, or try posting a question to the forum.

See the main Eclipse Foundation download site for convenient all-in-one packages. The archive site contains older releases (including the last 3.x version, 3.8.2). For reference, see also the p2 repositories provided, meaning of kinds of builds (P,M,I,S, and R), and the build schedule.

Latest Downloads
0) { $firstChar = substr($dirName, 0, 1); //echo "first char: ".$firstChar; foreach($dropPrefix as $type) { if ($firstChar == "$type") { $result = true; break; } } } } else { echo "dropPrefix not defined as expected\n"; } return $result; } function calcTestConfigsRan($buildName, $testResultsDirName) { global $subdirDrops; global $expectedtestConfigs; $boxes=0; // the include file, testConfigs.php defines 'testConfigs' array, // which consists of strings defining what platforms and vms we test. // For example, a testConfigs.php file might consist of // 0) { // minus 1 is taken as numeric code that "build failed". $boxes=-1; unset ($BUILD_FAILED); } } if ($boxes != -1 && $boxes != -2) { // TEMP? appears "old style" builds had directories named "results", but now "testresults" // and we want to look in $testResultsDirName/consolelogs if (file_exists("$subdirDrops/$buildName/$testResultsDirName/consolelogs")) { $buildDir = dir("$subdirDrops/$buildName/$testResultsDirName/consolelogs"); while ($file = $buildDir->read()) { for ($i = 0 ; $i < $expectedtestConfigs ; $i++) { if (strncmp($file, $testConfigs[$i], count($testConfigs[$i])) == 0) { $boxes++; break; } } } } } //echo "DEBUG: boxes: $boxes"; return $boxes; } function printBuildColumns($fileName, $parts) { global $subdirDrops; // no file name, write empty column if ($fileName == "") { echo " \n"; return; } // get build name, date and time $dropDir="$subdirDrops/$fileName"; if (count($parts)==3) { $buildName=$parts[1]; $buildDay=intval(substr($parts[2], 0, 8)); $buildTime=intval(substr($parts[2], 8, 4)); $buildType=$parts[0]; } if (count($parts)==2) { $buildName=$fileName; $buildDay=intval(substr($buildName, 1, 8)); $buildTime=intval(substr($buildName, 10, 2))*60+intval(substr($buildName, 12, 2)); $buildType=substr($buildName, 0, 1); } // compute minutes elapsed since build started $day=intval(date("Ymd")); $time=intval(date("H"))*60+intval(date("i")); $diff=($day-$buildDay)*24*60+$time-$buildTime; // Add icons echo "\n"; // hard code for now the build is done // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378706 // but later, changed ... // compute build done based on "buildPending" file, but if not // present, assume build is done // https://bugs.eclipse.org/bugs/show_bug.cgi?id=382196 $build_done=true; if (file_exists("$dropDir/buildPending")) { $build_done=false; } if ($build_done) { // test results location changed. 'testresults' is new standard // but we check for 'results' for older stuff. // https://bugs.eclipse.org/bugs/show_bug.cgi?id=379408 $testResultsDirName=""; if (file_exists("$dropDir/testresults")) { $testResultsDirName="testresults"; } else { if (file_exists("$dropDir/results")) { $testResultsDirName="results"; } } $boxes=calcTestConfigsRan($fileName, $testResultsDirName); // boxes == -1 is code that "bulid failed" and no tests are expected. if ($boxes == -1) { $buildimage="build_failed.gif"; $buildalt="Build failed"; } else { $buildimage="build_done.gif"; $buildalt="Build is available"; } if (file_exists("$dropDir/buildUnstable")) { $buildimage="caution.gif"; $buildalt="Build is unstable"; } echo "\"$buildalt\"\n"; // set to zero globally, but computed in calcTestConfigsRan global $expectedtestConfigs; $boxesTitle=""; // We skip the main "tests" part for patch builds, since don't expect any (for now). if ($buildType !== "P" && $boxes !== -2) { // always put in links, since someone may want to look at logs, even if not tests results, per se // don't forget to end link, after images decided. if ($boxes > -1) { $boxesTitle=$boxes." of ".$expectedtestConfigs." test platforms finished."; } if ($testResultsDirName === "results") { echo ""; } else { echo ""; } if ($boxes == -1) { $testimage="caution.gif"; $testalt="Integration tests did not run due to failed build"; } elseif ($boxes == 0 && $diff > 720) { // assume if no results at all, after 12 hours, assume they didn't run for unknown reasons $testimage="caution.gif"; $testalt="Integration tests did not run, due to unknown reasons."; } elseif ($boxes > 0 && $boxes < $expectedtestConfigs) { if ($diff > 1440) { $testimage="junit.gif"; $testalt="Tests results are available but did not finish on all machines"; } else { $testimage="runtests.gif"; $testalt="Integration tests are running ..."; } } elseif ($boxes == $expectedtestConfigs) { $testimage="junit.gif"; $testalt="Tests results are available"; } else { $testimage="runtests.gif"; $testalt="Integration tests are running ..."; } echo "\"$testalt\"\n"; if ($boxes > -1) { echo " (".$boxes." of ".$expectedtestConfigs." platforms)\n"; } echo "\n"; } else { echo ""; $testimage="results.gif"; $testalt="Logs from build"; echo "\"$testalt\""; if ($buildType == "P") { echo " (No automated tests)"; } elseif ($boxes == -2) { echo " (No expected tests)"; } else { echo " (unexpected test boxes)"; } echo "\n"; } } echo "\n"; return $buildName; } ?> read()) { // Short cut because we know aDirectory only contains other directories. if ($anEntry != "." && $anEntry!=".." && $anEntry!="TIME" && startsWithDropPrefix($anEntry,$dropPrefix)) { $parts = explode("-", $anEntry); // echo "

an entry: $anEntry\n"; // do not count hidden directories in computation // allows non-hidden ones to still show up as "most recent" else will be blank. if (file_exists("$subdirDrops/$buildName/buildproperties.php")) { include "$subdirDrops/$buildName/buildproperties.php"; } if (count($parts) == 3) { $timePart = $parts[2]; $year = substr($timePart, 0, 4); $month = substr($timePart, 4, 2); $day = substr($timePart, 6, 2); $hour = substr($timePart,8,2); $minute = substr($timePart,10,2); // special logic adds n seconds if build id contains "RCn". Originally added for the "M-build case" this was // where there is an M build and and RC version that // have same time stamp. One second will not effect the displayed value. // RCn logic was added once we had cases where the RC timestamp did not differ (that is, a previous RC had no changes, // but the build was copied and renamed, say from "RC3" to "RC4". $pattern="/.*RC([1234]).*/"; $matches=array(); $isRC = preg_match($pattern, $anEntry, $matches); if ($isRC === false || $isRC == 0) { $timeStamp = mktime($hour, $minute, 0, $month, $day, $year); } else { $timeStamp = mktime($hour, $minute, $matches[1], $month, $day, $year); } $buckets[$parts[0]][$timeStamp] = $anEntry; $timeStamps[$anEntry] = date("D, j M Y -- H:i (O)", $timeStamp); // latestTimeStamp will not be defined, first time through if (!isset($latestTimeStamp) || !array_key_exists($parts[0],$latestTimeStamp) || $timeStamp > $latestTimeStamp[$parts[0]]) { $latestTimeStamp[$parts[0]] = $timeStamp; $latestFile[$parts[0]] = $anEntry; } } if (count($parts) == 2) { $buildType=substr($parts[0],0,1); //$buckets[$buildType][] = $anEntry; $datePart = substr($parts[0],1); $timePart = $parts[1]; $year = substr($datePart, 0, 4); $month = substr($datePart, 4, 2); $day = substr($datePart, 6, 2); $hour = substr($timePart,0,2); $minute = substr($timePart,2,2); $pattern="/.*RC([1234]).*/"; $matches=array(); $isRC = preg_match($pattern, $anEntry, $matches); if ($isRC === false || $isRC == 0) { $timeStamp = mktime($hour, $minute, 0, $month, $day, $year); } else { $timeStamp = mktime($hour, $minute, $matches[1], $month, $day, $year); } $buckets[$buildType[0]][$timeStamp] = $anEntry; $timeStamps[$anEntry] = date("D, j M Y -- H:i (O)", $timeStamp); if (!isset($latestTimeStamp) || !array_key_exists($buildType,$latestTimeStamp) || $timeStamp > $latestTimeStamp[$buildType]) { $latestTimeStamp[$buildType] = $timeStamp; $latestFile[$buildType] = $anEntry; } } } } ?> $parts[1]\n"; $buildName=$fileName; if (count($parts)==3) { $buildName=$parts[1]; } echo "\n"; if ($fileName == "") { echo "\n"; } else { // Note: '$value' basically comes from dlconfig4.php and serves two purposes: // 1) the "tool tip" when hovering over the "Latest" build. // 2) the "title bar" of remaining sections. // In other words dlconfig4.php would have to be expanded if we ever wanted // "tool tip" and "section title" to be (slightly) different from each other. echo "\n"; } $buildName = printBuildColumns($fileName, $parts); echo "\n"; echo "\n"; } } ?>
Build Name Build Status Build Date
 \n"; if (file_exists($subdirDrops."/".$fileName."/buildUnstable")) { $buildimage="caution.gif"; $buildalt="Build is unstable"; echo "\"$buildalt\"\n"; } echo "$buildName\n"; if (file_exists($subdirDrops."/".$fileName."/buildUnstable")) { echo " Unstable!\n"; } echo "$timeStamps[$fileName]
\n"; // header, colored row // name attribute can have no spaces, so we tranlate them to underscores // (could effect targeted links) $valueName=strtr($value,' ','_'); echo "\n"; echo "$value\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; $aBucket = $buckets[$prefix]; if (isset($aBucket)) { krsort($aBucket); foreach($aBucket as $innerValue) { $parts = explode("-", $innerValue); echo "\n"; $buildName=$innerValue; if (count ($parts)==3) { echo "\n"; } else if (count ($parts)==2) { echo "\n"; } else { echo "\n"; } $buildName = printBuildColumns($innerValue, $parts); echo "\n"; echo "\n"; } } echo "
Build NameBuild StatusBuild Date
\n"; if (file_exists($subdirDrops."/".$innerValue."/buildUnstable")) { $buildimage="caution.gif"; $buildalt="Build is unstable"; echo "\"$buildalt\"\n"; } echo "$parts[1]\n"; if (file_exists($subdirDrops."/".$innerValue."/buildUnstable")) { echo " Unstable!\n"; } echo "\n"; if (file_exists($subdirDrops."/".$innerValue."/buildUnstable")) { $buildimage="caution.gif"; $buildalt="Build is unstable"; echo "\"$buildalt\"\n"; } echo "$innerValue\n"; if (file_exists($subdirDrops."/".$innerValue."/buildUnstable")) { echo " Unstable!\n"; } echo "Unexpected numberof parts?$timeStamps[$innerValue]
\n"; } } require("DL.footer.php.html"); $html = ob_get_clean(); #echo the computed content echo $html;