遗留工件没有命名空间,并且采用以下样式:
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 目录 - 我个人不确定完整列表是什么,即使它们有限制(当然,某些工件总是可能希望在它们下面找到目录,在这种情况下它们不应移动)。