2012-07-02 3 views
17

Ich versuche, Importieren von Projekten zu einem Eclipse-Workspace via Kommandozeile zu automatisieren (einen Bash-Skript verwenden). Ich habe darauf hindeutet, viele Beiträge gesehen mit dem CDT kopflos Build auch für Nicht-C/C++ Projekte, aber ich will CDT zu vermeiden, zum Download als meine Projekte alle Java/Android-Projekte sind, und ich möchte dies für viele Menschen in der Lage sein zu automatisieren ohne sie alle herunterladen zu müssen CDT. Ich habe folgendes mit dem JDT Headless Build ohne Erfolg versucht:Automate Import von Java (Android) Projekten in Eclipse-Workspace durch Command

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

Ausgabe zeigt „Building Arbeitsplatz“ und dann auf „Logout“, sondern um eine Sitzung von Eclipse im Arbeitsbereich zu öffnen zeigt nichts im Paket-Explorer.

an der ./metadata/.log Datei im Arbeitsbereich scheint das Suchen nicht mit dem Import Fehler zu zeigen.

Ist es nicht möglich, den Import bestehender Java Eclipse-Projekte in Eclipse zu automatisieren, ohne dass die CDT kopflos Build mit?

Antwort

15

Leider hat JDT Verteilung keine Anwendung, die -import Argument, wie CDT org.eclipse.cdt.managedbuilder.core.headlessbuild unterstützen würde. Aber man kann leicht ein einfaches schreiben:

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() { 
    } 
} 

Ihre plugin.xml sollte wie enthalten:

<?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> 

erstellen und exportieren Sie Ihre Plug-in als "test.myapp_1.0.0.jar" . Dann können Sie es wie folgt:

  1. Kopieren test.myapp_1.0.0.jar auf Ihre Eclipse/dropins/Ordner
  2. Kopieren Sie alle benötigten Plug-Ins Ziel-Workspace-Verzeichnis:

    cp -r Projekte/* NewWorkspace/

  3. Import Projekte in den Arbeitsplatz benötigt:

    eclipse -nosplash -Anwendung test.myapp.App -Daten NewWorkspace -import/path/to/NewWorkspace/project1 -import/pfad/zu/NewWorkspace/project2 etc ...

  4. Jetzt können Sie test.myapp_1.0.0.jar sicher aus dem Ordner Eclipse/dropins/entfernen.

habe ich den gesamten Code hochgeladen, einschließlich der exportierten Plug-in hier: https://github.com/spektom/eclipse-import

+0

ich Ihr Projekt verwendet habe meine Eclipse-Projekte zu automatisieren importieren. Es ist großartig, danke. Weitere Informationen finden Sie hier: http://stackoverflow.com/a/21229397/1033422. Ein Schritt, den ich als nächstes machen möchte, ist, den Projektaufbau nach dem Import zu automatisieren. Hast du eine Idee dazu? –

+1

Hallo SCH! Ich habe den Quellcode des Beispiel-Plugins bearbeitet, bitte finden Sie die neue Option "-build", die nach dem Import der Plugins die Wiederherstellung des Arbeitsbereichs auslöst. – spektom

+0

Super - danke Spektom! Momentan loope ich und rufe das Plugin auf, um jedes Projekt einzeln zu importieren, da ein schlechtes Projekt die verbleibenden Projekte vom Importieren abhalten kann. Ich schätze, in diesem Fall kann ich einfach die Option "-build" zum letzten Projekt hinzufügen, das importiert wird. –

Verwandte Themen