2014-05-25 1 views
1

Kepler SR2를 사용하여 Eclipse 플러그인을 프로그래밍하고 있습니다.Eclipse-PDE : AbstractDecoratedTextEditor를 확장 할 때 재미있는 IDE 동작

package com.example.plugin1; 
import org.eclipse.ui.texteditor.AbstractDecoratedTextEditor; 

public class MyEditor extends AbstractDecoratedTextEditor { 

    public static void main(String[] args) { 
     System.out.println(MyEditor.class); 
    } 
} 

이 IDE는 나에게 자연 수정 힌트 (org.eclipse.ui.editors 추가)를 제공하지 않습니다, 나는 의존성 ("필수 플러그인에 수동으로 추가 : 이제 나는 다음과 같은 더미 클래스를 빈 플러그인 plugin1를 생성하고 추가한다고 가정 해 봅시다 -ins "). 그러면 재미있는 일이 일어나기 시작합니다. 여전히 오류를 가지고, 다음과 같은 비밀 오류로 표시되어 클래스가 나타납니다

이 유형의 org.eclipse.jface.text.revisions.RevisionInformation이 이

를 확인할 수 없습니다. 필수 .class 파일에서 간접적으로 참조됩니다.

이것이 의미하는 것이 확실하지 않아 필요한 플러그인에 org.eclipse.jface.text을 추가하려고합니다. 그런 다음 오류없이 컴파일됩니다. 그러나 나는 이클립스 실행에서 내 (admitedly 바보지만, 법적) 클래스를 실행하려고하고 실행기에서 이상한 팝업 때 "Java 예외가 발생했습니다", 콘솔이 스택 트레이스 뱉어 :

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/ui/actions/WorkspaceModifyOperation 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
    at java.lang.Class.getMethod0(Unknown Source) 
    at java.lang.Class.getMethod(Unknown Source) 
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: org.eclipse.ui.actions.WorkspaceModifyOperation 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 6 more 

을 또한 (다른 클래스에서) Class.forName를 사용하여

public static void main(String[] args) throws ClassNotFoundException { 
    System.out.println("trying..."); 
    Class c=Class.forName("com.example.plugin1.MyEditor"); 
    System.out.println("class=" + c); 
} 

을 런타임에 클래스의로드를 시도하고 클래스를로드 할 때 그것은 다시 실패. 내가 디버그 모드에서 그것을 실행하면, 나는 이클립스 실행이 바르게 클래스 경로 계산하는 것 같다 확인할 수 있습니다 : 여기 내 덤프입니다 :이 이해 할 수 없습니다

\eclipse\plugins\org.eclipse.ui_3.105.0.v20130522-1122.jar 
\eclipse\plugins\org.eclipse.swt_3.102.1.v20140206-1334.jar 
\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.102.1.v20140206-1358.jar 
\eclipse\plugins\org.eclipse.jface_3.9.1.v20130725-1141.jar 
\eclipse\plugins\org.eclipse.core.commands_3.6.100.v20130515-1857.jar 
\eclipse\plugins\org.eclipse.ui.workbench_3.105.2.v20140211-1711.jar 
\eclipse\plugins\org.eclipse.e4.ui.workbench3_0.12.0.v20130515-1857.jar 
\eclipse\plugins\org.eclipse.core.runtime_3.9.100.v20131218-1515.jar 
\eclipse\plugins\javax.annotation_1.1.0.v201209060031.jar 
\eclipse\plugins\javax.inject_1.0.0.v20091030.jar 
\eclipse\plugins\org.eclipse.osgi_3.9.1.v20140110-1610.jar 
\eclipse\plugins\org.eclipse.equinox.common_3.6.200.v20130402-1505.jar 
\eclipse\plugins\org.eclipse.core.jobs_3.5.300.v20130429-1813.jar 
\eclipse\plugins\org.eclipse.core.runtime.compatibility.registry_3.5.200.v20130514-1256\runtime_registry_compatibility.jar 
\eclipse\plugins\org.eclipse.equinox.registry_3.5.301.v20130717-1549.jar 
\eclipse\plugins\org.eclipse.equinox.preferences_3.5.100.v20130422-1538.jar 
\eclipse\plugins\org.eclipse.core.contenttype_3.4.200.v20130326-1255.jar 
\eclipse\plugins\org.eclipse.equinox.app_1.3.100.v20130327-1442.jar 
\eclipse\plugins\org.eclipse.ui.editors_3.8.100.v20130513-1637.jar 
\eclipse\plugins\org.eclipse.core.filebuffers_3.5.300.v20130225-1821.jar 
\eclipse\plugins\org.eclipse.jface.text_3.8.101.v20130802-1147.jar 
\eclipse\plugins\org.eclipse.text_3.5.300.v20130515-1451.jar 
\eclipse\plugins\org.eclipse.ui.ide_3.9.2.v20131004-0923.jar 
\eclipse\plugins\org.eclipse.ui.views_3.6.100.v20130326-1250.jar 
\eclipse\plugins\org.eclipse.ui.workbench.texteditor_3.8.101.v20130729-1318.jar 

. 왜 클래스를로드 할 수 없습니까? 어떤 생각?

+0

이처럼 자신의'main'에서 Eclipse 플러그인을 실행할 수 없으므로'Run As> Eclipse를 사용해야합니다 Application'을 사용하여 올바른 Eclipse의 main 메소드가 사용되도록합니다. 이클립스는 플러그인 시스템이 올바르게 작동하도록하기 위해 많은 초기화 작업을해야한다. –

+0

필자는 이미 Eclipse-RCP를 사용하고 있지만이 문제는 OSGI 환경에서 클래스를 인스턴스화하거나 실행하는 것이 아니라 일부 툴링 응용 프로그램에서 외부에서 간단한 클래스 로딩을 시도하는 것으로 나타났습니다. 이클립스 플러그인의 클래스는 헤드리스 (headless) 호출자로부터 사용할 수 있어야한다 (아마 적어도 부분적으로로드 가능해야한다). – leonbloy

답변

0

음, 더 많은 플러그인을 추가하여 수정했습니다. org.eclipse.ui.editors 이외에 필요한 플러그인의 전체 세트는 것 같다 :

org.eclipse.jface.text 
org.eclipse.ui 
org.eclipse.core.resources 
org.eclipse.core.filesystem 

이 단지 경험이다. 내가 수동으로 추가해야만하는 이유는 무엇입니까? org.eclipse.ui.editors에서 종속성을 요구해서는 안됩니까? ...

+1

일부 플러그인 종속성은're export'로 표시 될 수 있으며 다른 플러그인의 명시 적 종속성에 추가되지 않습니다. –

관련 문제