我正在尝试使用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()
所以我知道这个类在classpath上。我唯一的想法是它与我们正在使用的库的反射方面有关。还有其他人遇到过这样的事吗?
我唯一的另一个想法,如果上面的内容是不可修复的,就是将内容拆分成shell脚本并使用Java运行数据库更新,然后使用wsadmin来部署EAR。