2009-12-13 2 views
1

Я хочу создать приложение командной строки, которое выполняет анализ кода Java. Eclipse JDT кажется правильным инструментом для работы, однако каждый учебник, который я могу найти на JDT, запускает JDT как плагин Eclipse.Возможно ли создать приложение JDT для командной строки?

Я бы ожидать что-то вроде этого:

public static void main(String[] args) throws Exception { 
    IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
    ... 
} 

, чтобы начать работу. Однако getWorkspace() выдает исключение, что служба не запущена.

+0

Я задавал подобный (не слишком подобный) вопрос здесь (http://stackoverflow.com/questions/1681218/is-it -возможность-развязать-код-индексирование-возможности-затмения), которые могут представлять интерес. – Grundlefleck

ответ

2

Если вы хотите использовать JDT, вам нужно начать затмение. Вы можете использовать точку расширения «org.eclipse.core.runtime.applications» для создания минимального приложения, которое начинается с командной строки.

  1. Создайте новый проект-плагин.
  2. Добавьте «org.eclipse.core.runtime» и «org.eclipse.core.resources» в зависимости.
  3. Создайте расширение для «org.eclipse.core.runtime.applications».
  4. Создайте класс, который реализует «org.eclipse.equinox.app.IApplication» и ссылается на него в вашем расширении.

Мой plugin.xml выглядит следующим образом:

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

MANIFEST.MF:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: TestApplication 
Bundle-SymbolicName: TestApplication;singleton:=true 
Bundle-Version: 1.0.0.qualifier 
Bundle-Activator: testapplication.Activator 
Require-Bundle: org.eclipse.core.runtime, 
org.eclipse.core.resources 
Bundle-ActivationPolicy: lazy 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 

Application1.java:

package testapplication; 

import org.eclipse.core.resources.ResourcesPlugin; 
import org.eclipse.equinox.app.IApplication; 
import org.eclipse.equinox.app.IApplicationContext; 

public class Application1 implements IApplication { 

    @Override 
    public Object start(IApplicationContext context) throws Exception { 
     System.out.println("Hello eclipse at " 
       + ResourcesPlugin.getWorkspace().getRoot().getRawLocation()); 
     return IApplication.EXIT_OK; 
    } 

    @Override 
    public void stop() { 
     // nothing to do at the moment 
    } 

} 

Выход:

Здравствуйте затмение в D: /Arne/workspaces/runtime-TestApplication.id2

+0

Спасибо Арне! Работал как шарм. Отображение файлов было особенно полезно для новичков в магии Eclipse/OSGi. Я собирался пожертвовать козлом своих соседей по этому поводу, но я должен буду сохранить его, потому что когда-то действительно неприятно ... – PeterH

0

Вы хотите, чтобы вы сначала запустили Eclipse. Используйте класс EclipseStarter для запуска работы, а затем вы можете использовать методы в ResourcePlugin.

+0

Я нашел класс EclipseStarter, но как его подключить? – PeterH

+0

Вы должны определить приложение Eclipse для его запуска, и оно запустит это приложение. Вы должны добавить плагин org.eclipse.osgi в свой путь к классам. В вашем приложении будет реализовано приложение IApplication, которое по существу запускает() и останавливает(). Изнутри метода start() вы можете начать свою работу. –

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