3

独自の新しいウィジェットを使用して新しいアプリケーションに取り組んでいますが、以前のアプリケーションからウィジェットの名前空間 (条件) を取得すると、コンパイラがエラーを出し始めました:

RegistryItemLoader.doPreLoadChecks (RegistryItemLoader.java:154): RegistryItemLoader.LoaderException: ResourceDirectory に definition.xml ファイルが含まれていません

古いアプリケーションでは、ウィジェットは正常に機能しました。

新しいアプリケーションでは、widgets ディレクトリのディレクトリ構造は次のようになります。

widgets/add-dependency/widget ファイル

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

名前空間可能なアーティファクトはAviarc3で提供され、次のスタイルになっています。

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

Aviarc 3は引き続きレガシーアーティファクトをサポートしますが、全か無かの方法で行われます。Aviarc 3は、アーティファクトディレクトリ内のレガシーアーティファクトを検出すると、直接の子ディレクトリ内にdefinition.xmlファイルがあるかどうかを確認することにより、アーティファクトディレクトリ全体をレガシーモードで取得しようとします。

指定したディレクトリ構造では、依存関係の追加ウィジェットはレガシーウィジェットであるため、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 に答える