2009-07-06 2 views
6

Я работаю со многими небольшими, но несвязанными java-проектами. Я создал скрипт Ant, который автоматически создает .project и .classpath, когда я создаю новый проект, с необходимыми библиотеками и именем проекта. Я хотел бы иметь возможность открыть Eclipse с этим проектом из командной строки. Сейчас я делаю это вручную, закрывая старый открытый проект в рабочей области, затем я импортирую и нахожу новый проект. Я не мог найти способ сделать это из Ant или партии. Я могу открыть Eclipse, но он подходит к последнему рабочему пространству/проекту. Я не возражаю, если мне придется создавать индивидуальное пространство/проект, но я не знаю, как это сделать из сценария. Благодарим вас за любые предложения.открыть конкретный проект затмения из командной строки

ответ

7

я бы не рекомендовал делать это, поскольку это не так уж много усилий, чтобы импортируйте проект с помощью стандартных мастеров. Я бы остановился на закрытии неактивных проектов (см. Ниже).

Редактировать: Если вы настроены на использование муравья, чтобы привести проекты в рабочую область, вы можете реализовать плагин, выполняющий что-то вроде кода ниже.

Вы закрываете старые проекты или удаляете их? Я не вижу причин для их удаления. Если вы закрываете все проекты, над которыми вы не работаете (щелкните правой кнопкой мыши по ним и выберите закрыть проект или выберите нужный проект и щелкните правой кнопкой мыши-> закрыть несвязанные проекты), они игнорируются платформой, поэтому это не повлияет на разработку открытый проект.

Чтобы скрыть закрытые проекты с точки зрения, вы можете нажать вниз, указывая треугольник в правом верхнем углу зрения Package Explorer выберите фильтров ... и в Выберите элементы для исключения из вид: список проверить Закрытые проекты опции.


Это плагин, который будет читать набор имен из файла в корневом каталоге рабочего пространства, удалить все существующие проекты (без удаления содержимого) и создавать новые проекты в рабочей области. Использование на свой страх и риск, без ответственности бла-бла.

Возьмите содержимое и поместите его в соответствующие файлы, и вы можете упаковать плагин Eclipse. Я бы рекомендовал использовать отдельную установку Eclipse (на самом деле я рекомендую не использовать ее вообще), поскольку она будет запускаться каждый раз, когда она найдет новый файл project.txt в корневой области рабочей области.

Объявление в plugin.xml реализует точку расширения Eclipse, которая вызывается после инициализации рабочего места. Вызывается метод EarlyStartup() для StartupHelper. Он создает новый Runnable, который выполняется асинхронно (это означает, что загрузка рабочей области не будет блокироваться, если у этого плагина есть проблемы). Runnable считывает строки из волшебного файла newprojects.txt, который он ожидает увидеть в корневой области рабочей области. Если он найдет какое-либо содержимое, он удалит/создаст проекты.

Update: Помощник был изменен, чтобы позволить проекты, которые будут созданы за пределами рабочей области, если определить значение в newprojects.txt предполагается, что является абсолютной URI проекта. Обратите внимание, что он не выходит из строки, поэтому, если вы находитесь на платформе Windows, используйте двойные слэши на пути.

Пример содержания:

#will be created in the workspace 
project1 
#will be created at c:\test\project2 
project2=c:\\test\project2 

удачи!

/META-INF/MANIFEST.MF:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Project fettling Plug-in 
Bundle-SymbolicName: name.seller.rich;singleton:=true 
Bundle-Version: 1.0.0 
Bundle-Activator: name.seller.rich.Activator 
Require-Bundle: org.eclipse.core.runtime, 
org.eclipse.ui.workbench;bundle-version="3.4.1", 
org.eclipse.swt;bundle-version="3.4.1", 
org.eclipse.core.resources;bundle-version="3.4.1" 
Bundle-ActivationPolicy: lazy 

/plugin.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.0"?> 
<plugin> 
    <extension 
     point="org.eclipse.ui.startup"> 
     <startup class="name.seller.rich.projectloader.StartupHelper"/>      
    </extension> 
</plugin> 

/.project:

<?xml version="1.0" encoding="UTF-8"?> 
<projectDescription> 
    <name>name.seller.rich.projectloader</name> 
    <comment></comment> 
    <projects> 
    </projects> 
    <buildSpec> 
     <buildCommand> 
      <name>org.eclipse.jdt.core.javabuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
     <buildCommand> 
      <name>org.eclipse.pde.ManifestBuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
     <buildCommand> 
      <name>org.eclipse.pde.SchemaBuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
    </buildSpec> 
    <natures> 
     <nature>org.eclipse.pde.PluginNature</nature> 
     <nature>org.eclipse.jdt.core.javanature</nature> 
    </natures> 
</projectDescription> 

/.classpath:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> 
    <classpathentry kind="src" path="src/main/java"/> 
    <classpathentry kind="output" path="target/classes"/> 
</classpath> 

/src/main/java/name/seller/rich/Activator.java:

package name.seller.rich; 

import org.eclipse.core.runtime.Plugin; 
import org.osgi.framework.BundleContext; 

/** 
* The activator class controls the plug-in life cycle 
*/ 
public class Activator extends Plugin { 

    // The plug-in ID 
    public static final String PLUGIN_ID = "name.seller.rich"; 

    // The shared instance 
    private static Activator plugin; 

    /** 
    * Returns the shared instance 
    * 
    * @return the shared instance 
    */ 
    public static Activator getDefault() { 
     return plugin; 
    } 

    /** 
    * The constructor 
    */ 
    public Activator() { 
    } 

    @Override 
    public void start(final BundleContext context) throws Exception { 
     super.start(context); 
     plugin = this; 
    } 

    @Override 
    public void stop(final BundleContext context) throws Exception { 
     plugin = null; 
     super.stop(context); 
    } 

} 

/SRC/главная/Java/имя/продавец/богатый/projectloader/StartupHelper .java:

package name.seller.rich.projectloader; 

import java.io.File; 
import java.io.FileInputStream; 
import java.util.Map; 
import java.util.Properties; 

import name.seller.rich.Activator; 

import org.eclipse.core.internal.resources.ProjectDescription; 
import org.eclipse.core.resources.IProject; 
import org.eclipse.core.resources.IWorkspaceRoot; 
import org.eclipse.core.resources.ResourcesPlugin; 
import org.eclipse.core.runtime.IPath; 
import org.eclipse.core.runtime.IProgressMonitor; 
import org.eclipse.core.runtime.IStatus; 
import org.eclipse.core.runtime.NullProgressMonitor; 
import org.eclipse.core.runtime.Path; 
import org.eclipse.core.runtime.Status; 
import org.eclipse.ui.IStartup; 
import org.eclipse.ui.IWorkbench; 
import org.eclipse.ui.PlatformUI; 

public class StartupHelper implements IStartup { 

    private static final class DirtyHookRunnable implements Runnable { 
     private IWorkspaceRoot workspaceRoot; 

     private DirtyHookRunnable(final IWorkspaceRoot workspaceRoot) { 
      this.workspaceRoot = workspaceRoot; 
     } 

     public void run() { 

      try { 
       IPath workspaceLocation = this.workspaceRoot.getLocation(); 

       File startupFile = new File(workspaceLocation.toOSString(), 
         "newprojects.txt"); 

       IProgressMonitor monitor = new NullProgressMonitor(); 

       Properties properties = new Properties(); 
       if (startupFile.exists()) { 
        properties.load(new FileInputStream(startupFile)); 
       } 
       if (properties.size() > 0) { 
        // delete existing projects 
        IProject[] projects = this.workspaceRoot.getProjects(); 

        for (IProject project : projects) { 
         // don't delete the content 
         project.delete(false, true, monitor); 
        } 

        // create new projects 
        for (Map.Entry entry : properties.entrySet()) { 
         IProject project = this.workspaceRoot 
           .getProject((String) entry.getKey()); 

         // insert into loop 
         ProjectDescription projectDescription = new ProjectDescription(); 
         projectDescription.setName((String) entry.getKey()); 

         String location = (String) entry.getValue(); 

         // value will be empty String if no "=" on the line 
         // in that case it will be created in the workspace 
         // WARNING, currently windows paths must be escaped, 
         // e.g. c:\\test\\myproject 
         if (location.length() > 0) { 
          IPath locationPath = new Path(location); 
          projectDescription.setLocation(locationPath); 
         } 

         project.create(projectDescription, monitor); 

         // project.create(monitor); 
         project.open(monitor); 
        } 
       } 
      } catch (Exception e) { 
       IStatus status = new Status(IStatus.INFO, Activator.PLUGIN_ID, 
         0, "unable to load new projects", null); 
       Activator.getDefault().getLog().log(status); 
      } 
     } 
    } 

    public StartupHelper() { 
     super(); 
    } 

    public final void earlyStartup() { 

     IWorkbench workbench = PlatformUI.getWorkbench(); 
     IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); 

     workbench.getDisplay().asyncExec(new DirtyHookRunnable(workspaceRoot)); 
    } 
} 
+0

Прежде всего, спасибо за ответ. Это интересное занятие, и я буду смотреть на него, но это может показаться немного в стороне. Еще несколько слов о моей настройке: мы генерируем java-проекты (.java, resources) посредством предварительной обработки с «основной» базы кода. Затем мы настраиваем и компилируем его в банки. Иногда нам нужно отлаживать в Eclipse, после чего мы вручную создаем проект и импортируем источник, res и библиотеки. Я сделал этот процесс автоматически, и я хотел бы закончить создание кода, открыв Eclipse с вновь созданным проектом. Старые проекты выбрасываются (закрыты/удалены). – alex

+0

Я не устарел от использования Ant, все идет, включая пакет (Win platform). – alex

+0

это немного взломать, но вы можете определить плагин, который проверяет хорошо известный файл для «нового» проекта при запуске Eclipse. Внедряя интерфейс IStartup, вызывается метод earlyStartup(), и вы можете создать проект, как указано выше. Если я получу некоторое время, я соберу более подробный ответ –

0

Частичное решение: Открыть затмение в заданном рабочем пространстве:

eclipse.exe -data C: \ имя рабочего пространства код \

+0

Как уже упоминалось, я могу сделать это уже, но это не очень помогает. Мне еще нужно закрыть предыдущий проект и перейти через импорт, чтобы открыть новый. – alex

5

Другое possible option дано на this question. Суть ответа заключается в том, если вы CDT установлен, вы можете сделать:

eclipse -nosplash 
    -application org.eclipse.cdt.managedbuilder.core.headlessbuild 
    -import  {[uri:/]/path/to/project} 
    -importAll {[uri:/]/path/to/projectTreeURI} Import all projects under URI 
    -build  {project_name | all} 
    -cleanBuild {projec_name | all} 

Хитрость здесь заключается в том, что он может импортировать любой проект, а не только проекты C.

Смежные вопросы