| /******************************************************************************* |
| * Copyright (c) 2000, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jsp.launching; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.debug.core.ILaunchConfiguration; |
| import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; |
| import org.eclipse.jdt.launching.IRuntimeClasspathEntry; |
| import org.eclipse.jdt.launching.IVMInstall; |
| import org.eclipse.jdt.launching.JavaRuntime; |
| import org.eclipse.jdt.launching.LibraryLocation; |
| import org.eclipse.jdt.launching.StandardClasspathProvider; |
| |
| /** |
| * TomcatClasspathProvider |
| */ |
| public class TomcatClasspathProvider extends StandardClasspathProvider { |
| |
| /** |
| * Tomcat requires <code>tools.jar</code> and <code>bootstrap.jar</code> on its |
| * classpath. |
| * |
| * @see org.eclipse.jdt.launching.IRuntimeClasspathProvider#computeUnresolvedClasspath(org.eclipse.debug.core.ILaunchConfiguration) |
| */ |
| public IRuntimeClasspathEntry[] computeUnresolvedClasspath(ILaunchConfiguration configuration) throws CoreException { |
| boolean useDefault = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH, true); |
| if (useDefault) { |
| IRuntimeClasspathEntry[] defaults = super.computeUnresolvedClasspath(configuration); |
| IVMInstall vm = JavaRuntime.computeVMInstall(configuration); |
| LibraryLocation[] libs = JavaRuntime.getLibraryLocations(vm); |
| List rtes = new ArrayList(); |
| for (int i = 0; i < defaults.length; i++) { |
| rtes.add(defaults[i]); |
| } |
| // add bootstrap.jar |
| String catalinaHome = TomcatLaunchDelegate.getCatalinaHome(); |
| IPath path = new Path(catalinaHome).append("bin").append("bootstrap.jar"); //$NON-NLS-1$ //$NON-NLS-2$ |
| IRuntimeClasspathEntry r = JavaRuntime.newArchiveRuntimeClasspathEntry(path); |
| r.setClasspathProperty(IRuntimeClasspathEntry.USER_CLASSES); |
| rtes.add(r); |
| // add class libraries to bootpath |
| boolean tools = false; // keeps track of whether a tools.jar was found |
| for (int i = 0; i < libs.length; i++) { |
| LibraryLocation lib = libs[i]; |
| if (lib.getSystemLibraryPath().toString().endsWith("tools.jar")) { //$NON-NLS-1$ |
| tools = true; |
| } |
| } |
| if (!tools) { |
| // add a tools.jar |
| IPath toolsPath = new Path(vm.getInstallLocation().getAbsolutePath()).append("lib").append("tools.jar"); //$NON-NLS-1$ //$NON-NLS-2$ |
| if (toolsPath.toFile().exists()) { |
| r = JavaRuntime.newArchiveRuntimeClasspathEntry(toolsPath); |
| r.setClasspathProperty(IRuntimeClasspathEntry.USER_CLASSES); |
| rtes.add(r); |
| } |
| } |
| return (IRuntimeClasspathEntry[])rtes.toArray(new IRuntimeClasspathEntry[rtes.size()]); |
| } else { |
| // recover persisted classpath |
| return recoverRuntimePath(configuration, IJavaLaunchConfigurationConstants.ATTR_CLASSPATH); |
| } |
| } |
| |
| } |