2016-03-30 3 views
1

Когда я попытался импортировать проект, содержащий некоторый JavaScript в рабочую область (с использованием версии Neon.M6 Eclipse), я получаю эту ошибку:Eclipse JSDT: внутренняя ошибка NoClassDefFoundError: jdk/nashorn/internal/runtime/ECMAException

eclipse.buildId=4.6.0.I20160317-0200 
java.version=1.8.0_05 
java.vendor=Oracle Corporation 
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US 

org.eclipse.core.jobs 
Error 
Wed Mar 30 18:38:50 CEST 2016 
An internal error occurred during: "Validating ****". 

java.lang.NoClassDefFoundError: jdk/nashorn/internal/runtime/ECMAException 
    at org.eclipse.wst.jsdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:860) 
    at org.eclipse.wst.jsdt.core.dom.ASTParser.createAST(ASTParser.java:651) 
    at org.eclipse.wst.jsdt.internal.core.validation.JavaScriptValidator.validate(JavaScriptValidator.java:62) 
    at org.eclipse.wst.validation.Validator$V2.validate(Validator.java:1159) 
    at org.eclipse.wst.validation.internal.ValManager.validate(ValManager.java:704) 
    at org.eclipse.wst.validation.internal.ValManager$1.visit(ValManager.java:665) 
    at org.eclipse.wst.validation.internal.ValManager.accept(ValManager.java:810) 
    at org.eclipse.wst.validation.internal.ValManager.validate(ValManager.java:669) 
    at org.eclipse.wst.validation.internal.ValBuilderJob$Visitor.visit(ValBuilderJob.java:299) 
    at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:120) 
    at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:84) 
    at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
    at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:87) 
    at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:87) 
    at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:87) 
    at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:87) 
    at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:87) 
    at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:129) 
    at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) 
    at org.eclipse.core.internal.resources.Resource.accept(Resource.java:52) 
    at org.eclipse.core.internal.resources.Resource.accept(Resource.java:117) 
    at org.eclipse.core.internal.resources.Resource.accept(Resource.java:105) 
    at org.eclipse.wst.validation.internal.ValBuilderJob.fullBuild(ValBuilderJob.java:219) 
    at org.eclipse.wst.validation.internal.ValBuilderJob.run(ValBuilderJob.java:178) 
    at org.eclipse.wst.validation.internal.ValBuilderJob.runInWorkspace(ValBuilderJob.java:126) 
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:39) 
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) 
Caused by: java.lang.ClassNotFoundException: jdk.nashorn.internal.runtime.ECMAException cannot be found by org.eclipse.wst.jsdt.core_2.0.0.v201603171403 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:444) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:357) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:349) 
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 27 more 

Я использую «Eclipse for Scout Developers», который должен содержать JSDT по умолчанию (это новый неоном, из-за the changes in the Scout Framework for Neon).

Здесь Детали установки Eclipse, моей текущей установки (только JSDT плагины):

Eclipse Installation Details

Любая идея, что это может быть?

+0

Как вы извлекаете/скачать JSDT? Новый парсер на M6 использует nashorn за кулисами, и что-то не подходит для вашей установки. –

+0

Плагин JSDT должен быть установлен по умолчанию в «Eclipse for Scout Developers» (версия Neon.M6).Совершенно очевидно, что установка там неправильная (потому что она новая с Neon), но я не могу ее проверить. – Jmini

ответ

5

Я узнал, как Нашорн подключен к JSDT благодаря чату с Г. Эркан. Здесь я записываю механизм. Я думаю, этого достаточно, чтобы понять и исправить поведение.

Nashorn - это библиотека времени исполнения Javascript, доступная с Java 8+ в папке <java-home>/lib/ext.

OSGi расслоения, по умолчанию, использует загрузочный загрузчик класса, который исключает Lib/Ext

Как JSDT.core использует Насхорн, команда JSDT разработала способ загрузки этой внешней LIB.

Хитрости состоит из двух частей:

Во время выполнения: фрагмента org.eclipse.wst.jsdt.nashorn.extension пучка имеет класс, расширяющий ClassLoaderHook, который расширяет расслоение классов, добавив LIB/ext. Для активации ClassLoaderHook вам нужно добавить следующие пары полн он запустить конфиг для Hook, чтобы быть эффективными:

-Dosgi.framework.extensions=org.eclipse.wst.jsdt.nashorn.extension 

Практически: вам нужно будет добавить параметр конфигурации беговой или конфигурацию продукта, чтобы иметь он работает во время выполнения.

Для тестирования во время разработки и в локальной сборке Tycho: вам нужно указать параметр, чтобы сообщить загрузчику классов Equinox загрузить нормальный загрузчик классов расширения Java. Для этого вам нужно будет использовать следующий из параметров:

-Dorg.osgi.framework.bundle.parent=ext 

Практически вам нужно будет добавить параметров в вашей тестовой конфигурации, так и в конфигурации Тайхо. В качестве примера проверьте webtools.jsdt\tests\pom.xml, где вы можете увидеть Tycho безошибочных пары:

<argLine>-Dorg.osgi.framework.bundle.parent=ext</argLine> 

Смотрите также

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