Ошибка сборки ExtJS 5.1 (ошибка синтаксического анализа Yui)
Я использую eclipse для разработки ExtJS, я использую ant build в eclipse, он использует Sencha cmd. Детали моего проекта
app.framework.version = 5.1.0.107
app.cmd.version = 5.1.0.26
когда я пытаюсь построить проект, он завершается неудачно с ошибками Yui Parse, но я не смог найти ни одной ошибки в своем рабочем пространстве... Можете ли вы объяснить сообщение трассировки стека?
page:
-before-page:
-init:
-init-compiler:
-copy-app-resources:
[x-compile] Copying page resources to D:\Users\admin\workspaceKepler\Propca\WebContent\build\production\Propca
[x-compile] C2009: YUI Parse Error (missing name after . operator => if (!Propca.view.abstract) Propca.view.abstract = {};) -- unknown-file:143:26
[x-compile] C2009: YUI Parse Error (missing name after . operator => Propca.view.abstract,) -- unknown-file:197633:25
[x-compile] C2009: YUI Parse Error (syntax error => ], 0));) -- unknown-file:197635:1
[x-compile] C2009: YUI Parse Error (missing name after . operator => Propca.view.abstract,) -- unknown-file:197657:25
[x-compile] C2009: YUI Parse Error (syntax error => ], 0));) -- unknown-file:197659:1
[x-compile] C2009: YUI Parse Error (missing name after . operator => (Ext.cmd.derive('Propca.view.querybuilder.QueryBuilder', Propca.view.abstract.PRPanel, {) -- unknown-file:197661:78
[x-compile] C2009: YUI Parse Error (syntax error => items: [) -- unknown-file:197679:15
[x-compile] C2009: YUI Parse Error (missing ; before statement => itemId: 'idbtnValidateSqlScript',) -- unknown-file:197682:24
[x-compile] C2009: YUI Parse Error (syntax error => bodypadding: '30',) -- unknown-file:197683:29
[x-compile] C2009: YUI Parse Error (syntax error => height: 30,) -- unknown-file:197684:24
[x-compile] InvocationTargetException: java.lang.reflect.InvocationTargetException
BUILD FAILED
com.sencha.exceptions.ExBuild: Failed to compress input
at com.sencha.tools.compressors.yui.YuiJavascriptCompressor.runYuiCompressor(YuiJavascriptCompressor.java:85)
at com.sencha.tools.compressors.yui.YuiJavascriptCompressor.compress(YuiJavascriptCompressor.java:96)
at com.sencha.tools.compressors.yui.YuiJavascriptCompressor.compress(YuiJavascriptCompressor.java:106)
at com.sencha.tools.page.PageModelBuilder.compressAsset(PageModelBuilder.java:413)
at com.sencha.tools.page.PageModelBuilder.copyResourcesToOutputDirectory(PageModelBuilder.java:398)
at com.sencha.command.compile.app.AppResourcesCommand.execute(AppResourcesCommand.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sencha.util.MethodInvoker$Arguments.invoke(MethodInvoker.java:175)
at com.sencha.cli.Command.dispatch(Command.java:43)
at com.sencha.cli.Commands.dispatch(Commands.java:64)
at com.sencha.command.compile.CompileCommands.dispatch(CompileCommands.java:308)
at com.sencha.cli.AbstractCommand.dispatch(AbstractCommand.java:124)
at com.sencha.ant.CompileTask$CompileToken.dispatchCommand(CompileTask.java:164)
at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
at org.eclipse.ant.internal.launching.remote.EclipseSingleCheckExecutor.executeTargets(EclipseSingleCheckExecutor.java:30)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)
Caused by: com.sencha.exceptions.ExReflect: java.lang.reflect.InvocationTargetException
at com.sencha.util.ReflectionUtil.newInstance(ReflectionUtil.java:116)
at com.sencha.tools.compressors.yui.YuiJavascriptCompressor.runYuiCompressor(YuiJavascriptCompressor.java:58)
... 48 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.sencha.util.ReflectionUtil.newInstance(ReflectionUtil.java:114)
... 49 more
Caused by: org.mozilla.javascript.EvaluatorException: Compilation produced 379 syntax errors.
at org.mozilla.javascript.DefaultErrorReporter.runtimeError(DefaultErrorReporter.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sencha.tools.compressors.yui.BaseYuiCompressor$1.invoke(BaseYuiCompressor.java:135)
at com.sun.proxy.$Proxy9.runtimeError(Unknown Source)
at org.mozilla.javascript.Parser.parse(Parser.java:392)
at org.mozilla.javascript.Parser.parse(Parser.java:337)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:312)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.<init>(JavaScriptCompressor.java:533)
... 54 more
Total time: 1 minute 15 seconds
2 ответа
Я собираюсь выйти на конечность и предположить, что это потому, что вы используете зарезервированное слово в названии вашей собственности. Хотя это обычно "хорошо" в javascript и ваше ExtJS-приложение работает в режиме разработки, я обнаружил это при минимизации удушения YUI по этим ключевым словам.
Самый простой (и, вероятно, рекомендуемый) вариант - просто избегать зарезервированных ключевых слов и называть абстрактным что-то другое, например, abstractObj. Если вы хотите вызвать проблему, вы можете вместо этого:
if(!Propca.view.abstract) // ...
... попробуйте обозначение доступа к массиву:
if(!Propca.view['abstract']) // ...
... или в частном случае if
заявление в сообщении об ошибке, in
оператор:
if(!('abstract' in Propca.view)) // ...
В этих случаях (и любых других, которые у вас могут быть) доступ к свойству с ключевым словом в виде строки, кажется, удовлетворяет компилятору - хотя это нарушает соглашение и выглядит не очень аккуратно, так что, возможно, оно того не стоит...
У вас есть синтаксическая ошибка в вашем JavaScript; когда это объединено в один файл, компрессор YUI не может обработать это и barfs.
К сожалению, ExtJS не имеет хороших инструментов для обнаружения ошибок в отдельных файлах. Вы можете попробовать другой инструмент (я использую jshint, например, в качестве задачи Ant перед сборкой), или вы можете просто посмотреть на файлы, которые изменились с момента последней успешной сборки, и сузить его таким образом.