3

我正在尝试将 wsadmin 与 Jython 一起使用来部署 EAR 文件。在实际部署之前,我需要使用 Java 类运行数据库更新。我遇到了一个对我来说没有意义的 ClassNotFoundException。

背景:EAR 文件被分解。wsadmin 工具使用以下选项启动:

-wsadmin_classpath %CP%
-javaoption -Dpython.path=%CP%

它们都指向同一个类路径,其中包含所有必要的 JAR。

jython 脚本获取到数据库的连接,并调用实用程序类来创建数据库脚本。实用程序类使用反射从类路径加载其他类(这是我们正在使用的库的硬性要求,无法更改)。它基本上看起来像这样:

from liquibase import Liquibase

def main(args):
    conn = getConnection(args)
    updater = Liquibase(conn)
    updater.update()

在 update() 方法期间,Liquibase 使用反射来实例化一些 Java 类。这是我得到 ClassNotFoundException 的地方,例如 ClassNotFoundException: com.foo.CustomUpdate

在我的脚本中,我可以导入 com.foo.CustomUpdate 类并且没有错误:

from com.foo import CustomUpdate
c = CustomUpdate("select 1")
print c.getUpdate()

所以我知道这个类在类路径上。我唯一的想法是它与我们正在使用的库的反射方面有关。有没有其他人遇到过这样的事情?

如果上述情况无法修复,我唯一的其他想法是将内容拆分为 shell 脚本并使用 Java 运行数据库更新,然后使用 wsadmin 部署 EAR。

4

0 回答 0