许多类在使用配置对象创建(实例化)类时都使用快捷名称。快捷名称称为别名
(如果类扩展 Ext.Component,则称为xtype
)。别名/xtype 列在适用类的类名旁边,以供快速参考。
框架类或其成员可以指定为private
或protected
。否则,类/成员为public
。Public
、protected
和private
是访问描述符,用于传达如何以及何时应使用类或类成员。
Public类和类成员可供任何其他类或应用程序代码使用,并且可以作为主要产品版本中稳定且持久的类和成员。Public 类和成员可以通过子类安全地扩展。
Protected类成员是稳定的public
成员,旨在供拥有类或其子类使用。Protected 成员可以通过子类安全地扩展。
Private类和类成员由框架内部使用,不打算供应用程序开发人员使用。Private 类和成员可能会在任何时候更改或从框架中省略,恕不另行通知,并且不应在应用程序逻辑中依赖它们。
static
标签。*请参见下面的静态内容。下面是一个示例类成员,我们可以对其进行剖析以显示类成员的语法(在这种情况下,是从 Ext.button.Button 类中查看的 lookupComponent 方法)。
让我们看看成员行中的每一部分
lookupComponent
)( item )
)Ext.Component
)。对于不返回 undefined
之外的任何内容的方法,可以省略此项,或者可能显示用正斜杠 /
分隔的多个可能值,表示返回的内容可能取决于方法调用的结果(即,如果 get 方法调用成功,方法可能返回 Component,如果失败,则返回 false
,将显示为 Ext.Component/Boolean
)。PROTECTED
- 请参见下面的“标志”部分)Ext.container.Container
)。如果成员源自当前类,则源类将显示为蓝色链接;如果成员是从祖先或混合类继承的,则显示为灰色。查看源
)item : Object
)进行列出。undefined
之外的值,“返回”部分将注明返回的类或对象类型以及描述(示例中的 Ext.Component
)自 3.4.0 起可用
- 示例中未显示)默认为:false
)API 文档使用许多标志来进一步传达类成员的功能和意图。标签可以用文本标签、缩写或图标表示。
classInstance.method1().method2().etc();
false
,则不会触发- 表示框架类
- 单例框架类。*有关更多信息,请参阅单例标志
- 组件类型框架类(Ext JS 框架中任何扩展 Ext.Component 的类)
- 表示类、成员或指南在当前查看的版本中是新的
- 表示类型为 config
的类成员
- 表示类型为 property
的类成员
- 表示类型为 method
的类成员
- 表示类型为 event
的类成员
- 表示类型为 theme variable
的类成员
- 表示类型为 theme mixin
的类成员
- 表示类、成员或指南在当前查看的版本中是新的
在 API 文档页面上类名称正下方是一行按钮,对应于当前类拥有的成员类型。每个按钮按类型显示成员数量(此数量在应用过滤器时更新)。单击按钮将导航到该成员部分。将鼠标悬停在成员类型按钮上将显示一个弹出菜单,其中包含该类型的所有成员,以便快速导航。
与类配置选项相关的 Getter 和 Setter 方法将显示在方法部分以及 API 文档和成员类型菜单的配置部分中,它们与之一起工作的配置正下方。Getter 和 Setter 方法文档将位于配置行中,以便于参考。
您的页面历史记录保存在本地存储中,并显示在顶部标题栏正下方(使用可用空间)。默认情况下,显示的唯一搜索结果是与您当前正在查看的产品/版本匹配的页面。您可以通过单击历史记录栏右侧的 按钮并选择“全部”单选选项来展开显示的内容。这将显示历史记录栏中所有产品/版本的所有近期页面。
在历史记录配置菜单中,您还将看到最近访问的页面列表。结果按“当前产品/版本”和“全部”单选选项进行筛选。单击 按钮将清除历史记录栏以及保存在本地存储中的历史记录。
如果在历史记录配置菜单中选择了“全部”,则将启用“在历史记录栏中显示产品详细信息”复选框选项。选中后,每个历史页面的产品/版本将与历史记录栏中的页面名称一起显示。将光标悬停在历史记录栏中的页面名称上也将显示产品/版本作为工具提示。
可以使用页面顶部的搜索字段搜索 API 文档和指南。
在 API 文档页面上,还有一个过滤器输入字段,用于使用过滤器字符串过滤成员行。除了按字符串过滤外,您还可以按访问级别、继承和只读过滤类成员。这是使用页面顶部的复选框完成的。
API 类导航树底部的复选框可过滤类列表,以包括或排除私有类。
单击一个空的搜索字段将显示您最近的 10 次搜索,以便快速导航。
每个 API 文档页面(除了 Javascript 基本类型页面)都有一个菜单视图,其中包含与该类相关的元数据。此元数据视图将包含以下一个或多个
Ext.button.Button
类具有备用类名 Ext.Button
)。备用类名通常用于向后兼容。可运行的示例(Fiddles)默认在页面上展开。您可以使用代码块左上角的箭头单独折叠和展开示例代码块。您还可以使用页面右上角的切换按钮切换所有示例的折叠状态。切换所有状态将在页面加载之间记住。
类成员默认在页面上折叠。您可以使用成员行左侧的箭头图标或使用右上角的展开/折叠所有切换按钮全局展开和折叠成员。
在较窄的屏幕或浏览器上查看文档将导致针对较小的尺寸优化视图。桌面和“移动”视图之间的主要区别是
可以通过单击 API 文档页面顶部的类名来查看类源。可以通过单击成员行右侧的“查看源”链接来查看类成员的源。
随着 GXT 4.0 主题生成器的推出,您现在可以通过在大量视觉选择中进行选择来开始生成主题。此新功能只需几个起始设置即可启动。
Java 7
Sencha 专业服务还可以为您构建主题。您可以在此处了解专业服务选项。
可以通过多种方式运行 themer。最简单的入门方法是从命令行开始。您可以通过运行 GXT 下载脚本中提供的预构建脚本之一来执行此操作。
themer.bat
文件旨在与 Windows 配合使用,
themer.sh
旨在与 Mac OS X 配合使用。
创建适用于 Linux 的脚本只需下载正确版本的 PhantomJS并指定可执行文件的路径即可。
还可以将 themer 直接作为 Ant 目标或作为 Maven exec:java 目标从 Java 中运行。
注意:这些脚本假定 Java 7 已设置为命令行使用,并且已指定平台特定的PhantomJS安装的位置。
这些选项在 Windows 和 Mac 上均可用。
usage: ThemeBuilder [options] [config ...]
-gen <path> directory to generate code to.
-generateConfig <outputFile> Generate sample configuration.
-gwtXmlFilename <gwtXmlFilename> Give ability to rename the Theme.gwt.xml file to something else. Must end with .gwt.xml.
-h,--help Print this message.
-i,--imagePath <customImagePath> Optional path to custom images or SVG files for image generation.
-imageFile <path> Captured image used for slicing images.
-manifestFile <manifestFile> JSON manifest file of the captured image.
-out <jar> Path to jar file to generate. Default is a jar named <theme.name>.jar in the current directory.
-slicedDisabled <slicedDisabled> Whether sliced version of the theme is disabled - flat themes or modern browsers. Default is false.
-sourcesOnly <boolean> Sources only vs compile and jar. Default is false.
-warDir <warDir> Directory to compile the css3-based theme to before images are sliced from it.
作为一种选择,您可以使用 Maven 来执行主题构建器。这可以通过示例原型项目很好地展示出来。
主题构建器支持传递多个配置文件。所有配置详细信息都可以存在于一个文件中,但在某些情况下,将这些配置分离到多个文件中可能会很方便。这有助于将一个大文件分解成不同的“详细信息”组。此类组织方法的一个示例可能是 myconfig-base.theme
、myconfig-tools.theme
、myconfig-window.theme
等。
此功能还支持为单个应用程序维护多个主题的能力。常见的配置组件可以抽象到单独的文件中,并在主题生成之间重复使用。这有助于最大限度地减少多个主题之间的维护,同时减少复制/粘贴。
所有配置文件都按它们在命令行上出现的顺序进行处理。
通常,只要每个文件中的配置选项之间有明确的分隔,顺序就不重要。但是,如果同一配置存在于多个文件中,则最后一个配置将获胜。命令输出中没有表明存在多个配置,因此由开发人员来识别这些场景。
与单个配置文件选项一样,在运行主题生成器时必须提供完整配置。如果缺少任何部分,将显示一条错误消息,指示缺少哪些路径。在生成器继续之前,必须更正这些错误。
可以通过 -imagePath <path>
提供自定义图标。这些图标可以是光栅或 SVG 文件类型。
图标命名可以像 icon.svg
、iconOver.svg
或 iconClick.svg
这样给出。默认图标在所有情况下都显示,悬停图标用于鼠标悬停,单击图标用于单击选择。
当使用 SVG 文件时,可以提供一个 icon.css
模板文件来覆盖 SVG 文件中的样式。
GXT 4.x 图标覆盖必须使用与主题构建器中给出的相同图标。
使用 -imagePath .jpg
或 .png
。
icons
icons/button
icons/button/arrow.cssTemplate
icons/button/arrow.svg
icons/button/arrowBottom.svg
icons/button/split.cssTemplate
icons/button/split.svg
icons/button/splitBottom.cssTemplate
icons/button/splitBottom.svg
icons/button/toolBarArrow.cssTemplate
icons/button/toolBarArrow.svg
icons/button/toolBarArrowBottom.cssTemplate
icons/button/toolBarArrowBottom.svg
icons/button/toolBarButtonSplit.cssTemplate
icons/button/toolBarButtonSplit.svg
icons/button/toolBarButtonSplitBottom.cssTemplate
icons/button/toolBarButtonSplitBottom.svg
icons/container
icons/container/moreIcon.cssTemplate
icons/container/moreIcon.svg
icons/container/moreIconToolBar.cssTemplate
icons/container/moreIconToolBar.svg
icons/field
icons/field/allLeft.svg
icons/field/allRight.svg
icons/field/bold.cssTemplate
icons/field/bold.svg
icons/field/checked.cssTemplate
icons/field/checked.svg
icons/field/clearTrigger.cssTemplate
icons/field/clearTrigger.svg
icons/field/dateTrigger.cssTemplate
icons/field/dateTrigger.svg
icons/field/down.svg
icons/field/exclamation.svg
icons/field/fontDecrease.cssTemplate
icons/field/fontDecrease.svg
icons/field/fontHighlight.cssTemplate
icons/field/fontHighlight.svg
icons/field/fontIncrease.cssTemplate
icons/field/fontIncrease.svg
icons/field/italic.cssTemplate
icons/field/italic.svg
icons/field/justifyCenter.cssTemplate
icons/field/justifyCenter.svg
icons/field/justifyLeft.cssTemplate
icons/field/justifyLeft.svg
icons/field/justifyRight.cssTemplate
icons/field/justifyRight.svg
icons/field/left.svg
icons/field/link.cssTemplate
icons/field/link.svg
icons/field/ol.cssTemplate
icons/field/ol.svg
icons/field/radioSelected.cssTemplate
icons/field/radioSelected.svg
icons/field/radioUnselected.cssTemplate
icons/field/radioUnselected.svg
icons/field/right.svg
icons/field/source.cssTemplate
icons/field/source.svg
icons/field/spinnerDown.cssTemplate
icons/field/spinnerDown.svg
icons/field/spinnerUp.cssTemplate
icons/field/spinnerUp.svg
icons/field/triggerArrow.cssTemplate
icons/field/triggerArrow.svg
icons/field/ul.cssTemplate
icons/field/ul.svg
icons/field/unchecked.cssTemplate
icons/field/unchecked.svg
icons/field/underline.cssTemplate
icons/field/underline.svg
icons/field/up.svg
icons/grid
icons/grid/checked.cssTemplate
icons/grid/checked.svg
icons/grid/collapse.cssTemplate
icons/grid/collapse.svg
icons/grid/columnHeaderBtn.cssTemplate
icons/grid/columnHeaderBtn.svg
icons/grid/columnsIcon.cssTemplate
icons/grid/columnsIcon.svg
icons/grid/expand.cssTemplate
icons/grid/expand.svg
icons/grid/groupBy.cssTemplate
icons/grid/groupBy.svg
icons/grid/sortAscendingIcon.cssTemplate
icons/grid/sortAscendingIcon.svg
icons/grid/sortAscHeaderIcon.cssTemplate
icons/grid/sortAscHeaderIcon.svg
icons/grid/sortDescendingIcon.cssTemplate
icons/grid/sortDescendingIcon.svg
icons/grid/sortDescHeaderIcon.cssTemplate
icons/grid/sortDescHeaderIcon.svg
icons/grid/unchecked.cssTemplate
icons/grid/unchecked.svg
icons/menu
icons/menu/activeMenuParent.cssTemplate
icons/menu/activeMenuParent.svg
icons/menu/checked.cssTemplate
icons/menu/checked.svg
icons/menu/groupChecked.cssTemplate
icons/menu/groupChecked.svg
icons/menu/menuParent.cssTemplate
icons/menu/menuParent.svg
icons/menu/miniBottom.cssTemplate
icons/menu/miniBottom.svg
icons/menu/miniTop.cssTemplate
icons/menu/miniTop.svg
icons/menu/unchecked.cssTemplate
icons/menu/unchecked.svg
icons/statusproxy
icons/statusproxy/dropAllowed.svg
icons/statusproxy/dropNotAllowed.svg
icons/tabs
icons/tabs/activePlainTabClose.cssTemplate
icons/tabs/activePlainTabClose.svg
icons/tabs/activeTabClose.cssTemplate
icons/tabs/activeTabClose.svg
icons/tabs/plainTabClose.cssTemplate
icons/tabs/plainTabClose.svg
icons/tabs/scrollerLeft.svg
icons/tabs/scrollerRight.svg
icons/tabs/tabClose.cssTemplate
icons/tabs/tabClose.svg
icons/tips
icons/tips/anchorBottom.cssTemplate
icons/tips/anchorBottom.svg
icons/tips/anchorLeft.cssTemplate
icons/tips/anchorLeft.svg
icons/tips/anchorRight.cssTemplate
icons/tips/anchorRight.svg
icons/tips/anchorTop.cssTemplate
icons/tips/anchorTop.svg
icons/toolbar
icons/toolbar/first.cssTemplate
icons/toolbar/first.svg
icons/toolbar/last.cssTemplate
icons/toolbar/last.svg
icons/toolbar/next.cssTemplate
icons/toolbar/next.svg
icons/toolbar/prev.cssTemplate
icons/toolbar/prev.svg
icons/toolbar/refresh.cssTemplate
icons/toolbar/refresh.svg
icons/tools
icons/tools/close.svg
icons/tools/collapse.svg
icons/tools/doubleDown.svg
icons/tools/doubleLeft.svg
icons/tools/doubleRight.svg
icons/tools/doubleUp.svg
icons/tools/down.svg
icons/tools/expand.svg
icons/tools/gear.svg
icons/tools/left.svg
icons/tools/maximize.svg
icons/tools/minimize.svg
icons/tools/minus.svg
icons/tools/pin.svg
icons/tools/plus.svg
icons/tools/print.svg
icons/tools/question.svg
icons/tools/refresh.svg
icons/tools/restore.svg
icons/tools/right.svg
icons/tools/save.svg
icons/tools/search.svg
icons/tools/unpin.svg
icons/tools/up.svg
icons/tree
icons/tree/arrowDown.cssTemplate
icons/tree/arrowDown.svg
icons/tree/arrowRight.cssTemplate
icons/tree/arrowRight.svg
icons/tree/checked.cssTemplate
icons/tree/checked.svg
icons/tree/folder.cssTemplate
icons/tree/folder.svg
icons/tree/folderOpen.cssTemplate
icons/tree/folderOpen.svg
icons/tree/partial.cssTemplate
icons/tree/partial.svg
icons/tree/unchecked.cssTemplate
icons/tree/unchecked.svg
icons/widget
icons/widget/downIcon.cssTemplate
icons/widget/downIcon.svg
icons/widget/leftButton.cssTemplate
icons/widget/leftButton.svg
icons/widget/miniBottom.svg
icons/widget/miniLeft.svg
icons/widget/miniRight.svg
icons/widget/miniTop.svg
icons/widget/rightButton.cssTemplate
icons/widget/rightButton.svg
在 Windows 上,您可以运行
> themebuilder/bin/themer.bat
这里有一个使用“快速启动”主题配置的示例。
> .\themebuilder\bin\themer.bat .\themebuilder\examples\quick-start\quick-start.theme
在 OS X 上,您可以运行
$ ./themebuilder/bin/themer.sh
这里有一个使用“快速启动”主题配置的示例。
$ ./themebuilder/bin/themer.sh ./themebuilder/examples/quick-start/quick-start.theme
Themer 运行程序控制台输出看起来像这样。
示例输出
template generation started
template generation complete
image generation started
generating tool icons
Saving sliced image to /private/var/folders/x8/9wz7qtw96t7grkdyjw1l61p40000gn/T/temp7830532799076699840.1/com/example/client/sliced/window/window-r.png
Slicing complete - generated 225 images
slice complete
packaging started
packaging complete
The quickstart theme has finished generating.
Copy the jar (/Path/To/Jar/quickstart.jar) into your project and copy the following line into your gwt.xml file:
<inherits name="com.example.Theme" />
您可以通过自定义 neptune.theme
或 triton.theme
配置文件来分叉 Neptune 主题。
gxt-theme-neptune.jar
重命名为 gxt-theme.neptune.zip
。gxt-theme-neptune.zip
内容。./gxt-theme-neptune/neptune.theme
。name
属性更改为类似 name = "custom_neptune"
的内容。basePackage
更改为类似 tld.domain.theme.custom_neptune
的内容。../themebuilder/bin/themer.sh ./neptune.theme
生成主题。custom_neptune.jar
的 jar。注意:将 jar 复制到项目库文件夹,该文件夹可以命名为 gxt-project/lib
。gxt_project/lib/custom_neptune.jar
上“右键单击”并选择“添加到构建路径”。<inherits name="tld.domain.theme.custom_neptune.Theme" />
注意:务必禁用 gxt_project 模块配置中的任何其他主题。gxt-theme-neptune.jar
重命名为 gxt-theme.neptune.zip
。gxt-theme-neptune.zip
内容。.\gxt-theme-neptune\neptune.theme
。name
属性更改为类似 name = "custom_neptune"
的内容。basePackage
更改为类似 tld.domain.theme.custom_neptune
的内容。..\themebuilder\bin\themer.bat .\neptune.theme
生成主题。custom_neptune.jar
的 jar。注意:将 jar 复制到项目库文件夹,该文件夹可以命名为 gxt-project/lib
。gxt_project\lib\custom_neptune.jar
上右键单击并选择“添加到构建路径”。<inherits name="tld.domain.theme.custom_neptune.Theme" />
注意:务必禁用 gxt_project 模块配置中的任何其他主题。GXT 4.0 下载 zip 中有四个示例,位于 themebuilder/examples
目录中。每个文件夹都包含其自己的 readme.txt
文件。
skeleton-config/
- 正如名称所示,这只是基本框架,仅包含主题构建所需的属性。它提供了所有选项,让你在构建主题时决定要更改的内容。
skeleton-config.theme
文件中的属性添加所有值。.\themebuilder\examples\skeleton-config\skeleton-config.theme
./themebuilder/examples/skeleton-config/skeleton-config.theme
.\themebuilder\bin\themer.bat .\themebuilder\examples\skeleton-config\skeleton-config.theme
./themebuilder/bin/themer.sh ./themebuilder/examples/skeleton-config/skeleton-config.theme
quick-start/
- 此示例预先填充了所有必需的属性。这些属性中的大多数都构建为以文件顶部定义的值为关键值。这让你只需进行很少的更改,即可非常快速地粗略启动理想的主题。然后,你可以深入挖掘以进行更多更改,并确切获得项目所需的内容。
quick-start.theme
值。.\themebuilder\examples\quick-start\quick-start.theme
./themebuilder/examples/quick-start/quick-start.theme
.\themebuilder\bin\themer.bat .\themebuilder\examples\quick-start\quick-start.theme
./themebuilder/bin/themer.sh ./themebuilder/examples/quick-start/quick-start.theme
quickstart.jar
。 maven-jar/
- 这是一个从“quick-start”主题继承的示例 Maven 项目。运行 mvn install
会从配置中读取并构建主题所需的所有 jar 文件,并将其安装在本地存储库中。这基于用于生成“Neptune 主题”的 pom.xml
。
themeDetails.theme
的 maven-jar
目录中的主题。maven-jar
目录。cd .\themebuilder\examples\maven-jar
cd ./themebuilder/examples/maven-jar
mvn install
生成主题。sample-theme-1.0.0-SNAPSHOT.jar
的目标目录中找到生成的主题。 maven-source/
- 这是一个 Maven 项目,可让你生成一组源文件到 src/
目录,然后你可以在其中直接修改它们。要重置回初始设置或使用新版本的 GXT 进行更新,只需重新运行 mvn install -Pgenerate
命令即可更新源并重新应用所需的更改。这可让你对生成的主题进行版本控制,并对其进行自己的更改。
themeDetails.theme
的 maven-source
目录中的主题。maven-source
。cd .\themebuilder\examples\maven-source
cd ./themebuilder/examples/maven-source
mvn install -Pgenerate
生成主题源。src/main/java
中的任何源以满足你的特定需求mvn install
生成主题 jar。sample-theme-1.0.0-SNAPSHOT.jar
的目标目录中找到生成的主题。mvn install -Pgenerate
,它将还原源到其原始状态。生成主题后,只需复制 jar 并将其添加到库的类路径中。然后将其添加到 GWT 模块。
inherits
中使用的主题包命名派生自主题配置中的 basePackage
属性。
MyGxtProject40/lib
库文件夹。(可以更改 lib 名称。)quickstart.jar
复制到 MyGxtProject40/lib
文件夹。<inherits name="com.example.Theme" />
来添加主题。MyGxtProject40.gwt.xml 中的示例代码段。
<!-- <inherits name='com.sencha.gxt.theme.blue.Blue'/> -->
<!-- <inherits name='com.sencha.gxt.theme.gray.Gray' /> -->
<!-- <inherits name="com.sencha.gxt.theme.neptune.Theme" /> -->
<inherits name="com.example.Theme" />
使用生成的主题的 MyGxtProject40.gwt.xml 配置示例。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD GWT 2.7.0//EN"
"http://gwtproject.org/doctype/2.7.0/gwt-module.dtd">
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User' />
<!-- Other module inherits -->
<inherits name='com.sencha.gxt.ui.GXT' />
<inherits name='com.sencha.gxt.chart.Chart' />
<!-- GXT Stylesheet -->
<stylesheet src="reset.css" />
<!-- <inherits name='com.sencha.gxt.theme.blue.Blue'/> -->
<!-- <inherits name='com.sencha.gxt.theme.gray.Gray' /> -->
<!-- <inherits name="com.sencha.gxt.theme.neptune.Theme" /> -->
<inherits name="com.example.Theme" />
<!-- Specify the app entry point class. -->
<entry-point class='com.sencha.gxt.test.client.MyGxtProject40EntryPoint' />
<!-- Specify the paths for translatable code -->
<source path='client' />
<source path='shared' />
<!-- <set-configuration-property name="CssResource.style" value="pretty" /> -->
</module>
已向 4.0 添加了新属性。从旧主题配置文件升级时,输出将列出缺少的属性。
运行主题生成器并查找缺少属性的示例
$ ./themebuilder/bin/themer.sh ./themebuilder/examples/quick-start/quick-start.theme
Exception in thread "main" com.sencha.gxt.themebuilder.ConfigHandler$ConfigError: Configuration Errors:
Missing property: theme.details.field.radio
Missing property: theme.details.field.radio.boxLabel
Missing property: theme.details.field.radio.boxLabel.size
Missing property: theme.details.field.radio.boxLabel.family
Missing property: theme.details.field.radio.boxLabel.color
...
如果应用程序尝试访问尚未生成的主题,则会发生此错误。运行主题生成器以生成缺少的主题,并确保主题 jar 在类路径中可用。
Super Dev Mode starting up
workDir: /var/folders/x8/9wz7qtw96t7grkdyjw1l61p40000gn/T/gwt-codeserver-1988045627584289815.tmp
Loading modules
com.example.project.MyThemeSandbox
Loading inherited module 'com.example.project.MyThemeSandbox'
Loading inherited module 'com.example.project.MyThemeSandbox'
Loading inherited module 'com.example.project.Theme'
Loading inherited module 'com.example.project.Theme'
[ERROR] Unable to find 'com/example/project/Theme.gwt.xml' on your classpath; could be a typo, or maybe you forgot to include a classpath entry for source?
[ERROR] Unable to find 'com/example/project/Theme.gwt.xml' on your classpath; could be a typo, or maybe you forgot to include a classpath entry for source?
[ERROR] shell failed in doStartup method