我一直在使用它自己的新小部件开发一个新的应用程序但是当我从之前的应用程序中取出一个小部件命名空间(条件)时,编译器开始给我一个错误:
RegistryItemLoader.doPreLoadChecks(RegistryItemLoader.java:154):RegistryItemLoader.LoaderException:ResourceDirectory不包含definition.xml文件
在旧的应用程序中,小部件工作正常。
在新应用程序中,窗口小部件目录的目录结构如下所示:
小部件/添加依赖性/小部件文件
widgets / au.com.aviarc.widget.condition / 1.0.0 / widgets / is-enabled / widget files
答案 0 :(得分: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目录 - 我个人不确定完整列表是什么,如果它们甚至有限制(总是有些工件可能会找到自己下面的目录,当然,在这种情况下,不应该被移动。)