| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.hadoop.eclipse.server; |
| |
| import java.io.File; |
| import java.util.logging.Logger; |
| |
| import org.apache.hadoop.eclipse.Activator; |
| import org.apache.hadoop.eclipse.ErrorMessageDialog; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IJavaElement; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.ui.jarpackager.IJarExportRunnable; |
| import org.eclipse.jdt.ui.jarpackager.JarPackageData; |
| import org.eclipse.jface.operation.IRunnableWithProgress; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.ui.PlatformUI; |
| |
| /** |
| * Methods for interacting with the jar file containing the |
| * Mapper/Reducer/Driver classes for a MapReduce job. |
| */ |
| |
| public class JarModule implements IRunnableWithProgress { |
| |
| static Logger log = Logger.getLogger(JarModule.class.getName()); |
| |
| private IResource resource; |
| |
| private File jarFile; |
| |
| public JarModule(IResource resource) { |
| this.resource = resource; |
| } |
| |
| public String getName() { |
| return resource.getProject().getName() + "/" + resource.getName(); |
| } |
| |
| /** |
| * Creates a JAR file containing the given resource (Java class with |
| * main()) and all associated resources |
| * |
| * @param resource the resource |
| * @return a file designing the created package |
| */ |
| public void run(IProgressMonitor monitor) { |
| |
| log.fine("Build jar"); |
| JarPackageData jarrer = new JarPackageData(); |
| |
| jarrer.setExportJavaFiles(true); |
| jarrer.setExportClassFiles(true); |
| jarrer.setExportOutputFolders(true); |
| jarrer.setOverwrite(true); |
| |
| try { |
| // IJavaProject project = |
| // (IJavaProject) resource.getProject().getNature(JavaCore.NATURE_ID); |
| |
| // check this is the case before letting this method get called |
| Object element = resource.getAdapter(IJavaElement.class); |
| IType type = ((ICompilationUnit) element).findPrimaryType(); |
| jarrer.setManifestMainClass(type); |
| |
| // Create a temporary JAR file name |
| File baseDir = Activator.getDefault().getStateLocation().toFile(); |
| |
| String prefix = |
| String.format("%s_%s-", resource.getProject().getName(), resource |
| .getName()); |
| File jarFile = File.createTempFile(prefix, ".jar", baseDir); |
| jarrer.setJarLocation(new Path(jarFile.getAbsolutePath())); |
| |
| jarrer.setElements(resource.getProject().members(IResource.FILE)); |
| IJarExportRunnable runnable = |
| jarrer.createJarExportRunnable(Display.getDefault() |
| .getActiveShell()); |
| runnable.run(monitor); |
| |
| this.jarFile = jarFile; |
| |
| } catch (Exception e) { |
| e.printStackTrace(); |
| throw new RuntimeException(e); |
| } |
| } |
| |
| /** |
| * Allow the retrieval of the resulting JAR file |
| * |
| * @return the generated JAR file |
| */ |
| public File getJarFile() { |
| return this.jarFile; |
| } |
| |
| /** |
| * Static way to create a JAR package for the given resource and showing a |
| * progress bar |
| * |
| * @param resource |
| * @return |
| */ |
| public static File createJarPackage(IResource resource) { |
| |
| JarModule jarModule = new JarModule(resource); |
| try { |
| PlatformUI.getWorkbench().getProgressService().run(false, true, |
| jarModule); |
| |
| } catch (Exception e) { |
| e.printStackTrace(); |
| return null; |
| } |
| |
| File jarFile = jarModule.getJarFile(); |
| if (jarFile == null) { |
| ErrorMessageDialog.display("Run on Hadoop", |
| "Unable to create or locate the JAR file for the Job"); |
| return null; |
| } |
| |
| return jarFile; |
| } |
| |
| } |