2012-07-02 4 views
17

Estoy tratando de automatizar la importación de proyectos a un área de trabajo de Eclipse a través de la línea de comandos (usando un script bash). He visto muchas publicaciones que sugieren usar la construcción sin cabeza CDT incluso para proyectos que no son C/C++, pero quiero evitar tener que descargar CDT ya que todos mis proyectos son todos de Java/Android y quiero ser capaz de automatizar esto para muchas personas. sin tener que hacer que todos descarguen CDT. He intentado lo siguiente con el descabezado acumulación JDT sin resultado:Automatice la importación de proyectos Java (Android) en el área de trabajo de Eclipse a través de la línea de comandos

eclipse -nosplash \ 
    -application org.eclipse.jdt.apt.core.aptBuild \ 
    -data [absolute_path_to_desired_workspace] \ 
    -import [absolute_path_to_project_directories] 

salida muestra "espacio de trabajo de construcción" y luego "Salir", pero la apertura de una sesión de Eclipse en el espacio de trabajo no muestra nada en el Explorador de paquetes.

Al mirar el archivo ./metadata/.log en el área de trabajo no parece mostrar ningún error con la importación.

¿No es posible automatizar la importación de proyectos existentes de Eclipse de Java en Eclipse sin utilizar la compilación sin cabeza CDT?

Respuesta

15

Desafortunadamente, la distribución JDT no tiene ninguna aplicación que admita -porte argumento, como CDT org.eclipse.cdt.managedbuilder.core.headlessbuild. Pero se puede escribir fácilmente simple:

package test.myapp; 

import java.util.LinkedList; 
import java.util.List; 

import org.eclipse.core.resources.IProject; 
import org.eclipse.core.resources.IProjectDescription; 
import org.eclipse.core.resources.IncrementalProjectBuilder; 
import org.eclipse.core.resources.ResourcesPlugin; 
import org.eclipse.core.runtime.NullProgressMonitor; 
import org.eclipse.core.runtime.Path; 
import org.eclipse.equinox.app.IApplication; 
import org.eclipse.equinox.app.IApplicationContext; 

public class Application implements IApplication { 

    public Object start(IApplicationContext context) throws Exception { 

     String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); 

     boolean build = false; 

     // Determine projects to import 
     List<String> projects = new LinkedList<String>(); 
     for (int i = 0; i < args.length; ++i) { 
      if ("-import".equals(args[i]) && i + 1 < args.length) { 
       projects.add(args[++i]); 
      } else if ("-build".equals(args[i])) { 
       build = true; 
      } 
     } 

     if (projects.size() == 0) { 
      System.out.println("No projects to import!"); 
     } else { 
      for (String projectPath : projects) { 
       System.out.println("Importing project from: " + projectPath); 

       // Import project description: 
       IProjectDescription description = ResourcesPlugin.getWorkspace().loadProjectDescription(
         new Path(projectPath).append(".project")); 
       IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(description.getName()); 
       project.create(description, null); 
       project.open(null); 
      } 

      // Build all projects after importing 
      if (build) { 
       System.out.println("Re-building workspace"); 
       ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.CLEAN_BUILD, new NullProgressMonitor()); 
       ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor()); 
      } 
     } 
     return null; 
    } 

    public void stop() { 
    } 
} 

Su plugin.xml debe contener algo como:

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.4"?> 
<plugin> 
    <extension 
     id="App" 
     point="org.eclipse.core.runtime.applications"> 
     <application 
      cardinality="singleton-global" 
      thread="main" 
      visible="true"> 
     <run 
       class="test.myapp.Application"> 
     </run> 
     </application> 
    </extension> 
</plugin> 

Crear y exportar su plug-in como "test.myapp_1.0.0.jar" . Entonces se puede usar de la siguiente manera:

  1. Copia test.myapp_1.0.0.jar a tu// carpeta de Eclipse dropins
  2. Copiar todos los plug-ins necesarios en el directorio de espacio de trabajo de destino:

    cp proyectos -R/* NewWorkspace/

  3. de importación necesarias proyectos en el área de trabajo:

    Eclipse -nosplash -aplicación test.myapp.App -datos NewWorkspace -import/ruta/a/NewWorkspace/project1 -import/path/to/NewWorkspace/project2 etc ...

  4. Ahora puede quitar con seguridad test.myapp_1.0.0.jar de la carpeta Eclipse/dropins /.

He subido todo el código, incluyendo el plug-in exportados aquí: https://github.com/spektom/eclipse-import

+0

He usado su proyecto para automatizar la importación de mis proyectos de Eclipse. Es increíble, gracias. Consulte la respuesta aquí para obtener más información: http://stackoverflow.com/a/21229397/1033422. Un paso que me gustaría hacer a continuación es automatizar la construcción del proyecto después de la importación. ¿Tienes alguna idea sobre eso? –

+1

¡Hola SCH! He editado el código fuente del plugin de ejemplo, busque la nueva opción "-build", que activa la reconstrucción del espacio de trabajo después de que termine la importación de complementos. – spektom

+0

Impresionante - gracias Spektom! Por el momento, estoy haciendo un bucle y llamando al plugin para que importe cada proyecto por separado, ya que un proyecto malo puede evitar que los proyectos restantes se importen. Supongo que, en este caso, puedo agregar la opción '-build' al último proyecto que se está importando. –

Cuestiones relacionadas