我们已经成功执行了 DatabaseTablesPreparer 并初始化了 DB 中的表,但是当我们尝试使用 SQLScriptPreparer 初始化表上的索引时,我们得到以下异常:
ES1 dbinit [] [] com.intershop.platform.cartridge.internal.CartridgeImpl [] [] [] [] "main" 找不到墨盒“app_core_a1”的 Ivy 描述符和墨盒属性!ES1 dbinit [] [app_core_a1:Class1 DatabaseIndexesPreparer [hr/a1/core/dbinit/scripts/dbindex.ddl] 版本:null] com.intershop.beehive.core.dbinit.preparer.database.DatabaseIndexesPreparer [] [] [] [ ] "main" [core] Exception java.lang.NullPointerException: null at com.intershop.beehive.core.dbinit.preparer.database.SQLScriptPreparer.getCommand(SQLScriptPreparer.java:158) at com.intershop.beehive.core.dbinit .preparer.database.SQLScriptPreparer.process(SQLScriptPreparer.java:353)
我们在 DatabaseTablesPreparer 中遇到了类似的问题(Cartridge 为空),我们通过添加 Cartridge.properties 文件解决了这个问题,但现在我们得到了相同的错误(“Neither Ivy 描述符,也没有为墨盒 'app_core_a1' 找到墨盒属性”),即使定义了墨盒属性文件。
反编译的准备程序代码中有发生空指针异常的行:
getCartridge().getVersion() + (getCartridge().getBuild().isEmpty() ? "" : new StringBuilder().append(".").append(getCartridge().getBuild()).toString()) };
这是 dbinit.properties 中的准备程序:
Class1 = com.intershop.beehive.core.dbinit.preparer.database.DatabaseIndexesPreparer \
hr/a1/core/dbinit/scripts/dbindex.ddl
这是我们正在执行的 dbinit 命令:
dbinit.bat --exec-id=app_core_a1:Class1
来自同一盒的 DatabaseTablesPreparer,定义在同一 dbinit 中成功执行。