3

我一直在使用它自己的新小部件开发一个新应用程序,但是当我从以前的应用程序中提取一个小部件命名空间(条件)时,编译器开始给我一个错误:

RegistryItemLoader.doPreLoadChecks(RegistryItemLoader.java:154):RegistryItemLoader.LoaderException:ResourceDirectory 不包含定义.xml 文件

在旧应用程序中,小部件工作正常。

在新应用程序中,widgets 目录的目录结构如下所示:

小部件/添加依赖项/小部件文件

小部件/au.com.aviarc.widget.condition/1.0.0/widgets/is-enabled/widget 文件

4

1 回答 1

3

遗留工件没有命名空间,并且采用以下样式:

widgets
- grid
- - definition.xml
- text-dynamic
- - definition.xml

可命名空间工件出现在 Aviarc 3 中,它们的样式如下:

widgets
- example.namespace
- - 1.0.0
- - - widgets
- - - - grid
- - - - - definition.xml
- - - - text-dynamic
- - - - - definition.xml

Aviarc 3 仍然支持遗留工件,但它是一种全有或全无的方式。如果 Aviarc 3 检测到工件目录中的任何遗留工件(如通过查看任何直接子目录中是否有任何 definition.xml 文件来完成),它会尝试以遗留模式获取整个工件目录。

在您提供的目录结构中,add-dependency 小部件是旧版小部件,因此 Aviarc 尝试将所有小部件视为旧版小部件。导致该错误是因为它尝试读取目录 au.com.aviarc.widget.condition 中的 definition.xml 文件,但没有,因为它不是旧版小部件。

该问题的解决方案是:

  • 将所有遗留工件移动到命名空间中
  • 将所有命名空间的工件更改为遗留工件

前一种解决方案是推荐的解决方案。如果您在命名空间中有特定工件的多个版本,则后者可能是不可能的,并且通常需要对应用程序进行更多更改。

对于前者,最好首先将遗留工件移动到应用程序 1.0.0 命名空间中,因为这是引擎隐式授予它们的命名空间,因此围绕它们的任何特定命名空间都已经指向它. 应用程序 1.0.0 命名空间还保留了遗留工件的行为,因为其中的工件将自动覆盖内置工件,除非明确指定内置版本。

因此,您正在考虑将目录结构更改为:

widgets
- application
- - 1.0.0
- - - widgets
- - - - add-dependency
- - - - - ...
- au.com.aviarc.widget.condition
- - [no changes]

如果路径感觉有点长,则可以将一些遗留工件子目录移出各个小部件并设置在命名空间的小部件目录旁边。一些例子是 src 和 lib 目录 - 我个人不确定完整列表是什么,即使它们有限制(当然,某些工件总是可能希望在它们下面找到目录,在这种情况下它们不应移动)。

于 2012-09-13T00:31:41.227 回答