JarModule.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.eclipse.server;
  19. import java.io.File;
  20. import java.util.logging.Logger;
  21. import org.apache.hadoop.eclipse.Activator;
  22. import org.apache.hadoop.eclipse.ErrorMessageDialog;
  23. import org.eclipse.core.resources.IResource;
  24. import org.eclipse.core.runtime.IProgressMonitor;
  25. import org.eclipse.core.runtime.Path;
  26. import org.eclipse.jdt.core.ICompilationUnit;
  27. import org.eclipse.jdt.core.IJavaElement;
  28. import org.eclipse.jdt.core.IType;
  29. import org.eclipse.jdt.ui.jarpackager.IJarExportRunnable;
  30. import org.eclipse.jdt.ui.jarpackager.JarPackageData;
  31. import org.eclipse.jface.operation.IRunnableWithProgress;
  32. import org.eclipse.swt.widgets.Display;
  33. import org.eclipse.ui.PlatformUI;
  34. /**
  35.  * Methods for interacting with the jar file containing the
  36.  * Mapper/Reducer/Driver classes for a MapReduce job.
  37.  */
  38. public class JarModule implements IRunnableWithProgress {
  39.   static Logger log = Logger.getLogger(JarModule.class.getName());
  40.   private IResource resource;
  41.   private File jarFile;
  42.   public JarModule(IResource resource) {
  43.     this.resource = resource;
  44.   }
  45.   public String getName() {
  46.     return resource.getProject().getName() + "/" + resource.getName();
  47.   }
  48.   /**
  49.    * Creates a JAR file containing the given resource (Java class with
  50.    * main()) and all associated resources
  51.    * 
  52.    * @param resource the resource
  53.    * @return a file designing the created package
  54.    */
  55.   public void run(IProgressMonitor monitor) {
  56.     log.fine("Build jar");
  57.     JarPackageData jarrer = new JarPackageData();
  58.     jarrer.setExportJavaFiles(true);
  59.     jarrer.setExportClassFiles(true);
  60.     jarrer.setExportOutputFolders(true);
  61.     jarrer.setOverwrite(true);
  62.     try {
  63.       // IJavaProject project =
  64.       // (IJavaProject) resource.getProject().getNature(JavaCore.NATURE_ID);
  65.       // check this is the case before letting this method get called
  66.       Object element = resource.getAdapter(IJavaElement.class);
  67.       IType type = ((ICompilationUnit) element).findPrimaryType();
  68.       jarrer.setManifestMainClass(type);
  69.       // Create a temporary JAR file name
  70.       File baseDir = Activator.getDefault().getStateLocation().toFile();
  71.       String prefix =
  72.           String.format("%s_%s-", resource.getProject().getName(), resource
  73.               .getName());
  74.       File jarFile = File.createTempFile(prefix, ".jar", baseDir);
  75.       jarrer.setJarLocation(new Path(jarFile.getAbsolutePath()));
  76.       jarrer.setElements(resource.getProject().members(IResource.FILE));
  77.       IJarExportRunnable runnable =
  78.           jarrer.createJarExportRunnable(Display.getDefault()
  79.               .getActiveShell());
  80.       runnable.run(monitor);
  81.       this.jarFile = jarFile;
  82.     } catch (Exception e) {
  83.       e.printStackTrace();
  84.       throw new RuntimeException(e);
  85.     }
  86.   }
  87.   /**
  88.    * Allow the retrieval of the resulting JAR file
  89.    * 
  90.    * @return the generated JAR file
  91.    */
  92.   public File getJarFile() {
  93.     return this.jarFile;
  94.   }
  95.   /**
  96.    * Static way to create a JAR package for the given resource and showing a
  97.    * progress bar
  98.    * 
  99.    * @param resource
  100.    * @return
  101.    */
  102.   public static File createJarPackage(IResource resource) {
  103.     JarModule jarModule = new JarModule(resource);
  104.     try {
  105.       PlatformUI.getWorkbench().getProgressService().run(false, true,
  106.           jarModule);
  107.     } catch (Exception e) {
  108.       e.printStackTrace();
  109.       return null;
  110.     }
  111.     File jarFile = jarModule.getJarFile();
  112.     if (jarFile == null) {
  113.       ErrorMessageDialog.display("Run on Hadoop",
  114.           "Unable to create or locate the JAR file for the Job");
  115.       return null;
  116.     }
  117.     return jarFile;
  118.   }
  119. }