使用ant / jenkins在WebSphere 6.1上生成EAR的类强制转换异常

时间:2011-11-11 09:09:01

标签: java ant websphere jenkins classcastexception

在部署作为在Jenkins上运行的ant构建脚本的一部分生成的ear到Websphere 6.1之后,我遇到了运行时类转换异常。转换类异常存在于某些DAO方法中,这些方法将从SQL查询返回的对象转换为特定的类。

如果我从Eclipse(RAD)中生成EAR,则不会发生类强制转换异常,并且将来自jenkins / ant生成的耳朵的类文件与来自Eclipse的类文件进行比较,显示不同的文件大小和内容。

我正在尝试使用Webspehre 6.1提供的JDK使ant执行javac。所以我在Jenkins中设置了一个多配置项目来使用IBM JDK。我假设这使得ant javac任务使用这个jdk。

这是我的蚂蚁javac任务:

    <javac srcdir="${src.dir}" destdir="${build.dir}"  debug="true"  debuglevel="vars,lines,source" target="1.5">
        <classpath refid="master-classpath" />
    </javac>

我现在唯一能想到的是确保蚂蚁实际上使用此jdk运行,而不是仅使用此jdk执行javac。有办法检查吗?

[edit]我已经将ant.bat文件更改为输出JAVA_HOME,它确实在我在jenkins中指定的文件下运行。

[EDIT2]

好的,终于找到了问题的原因:

在Hibernate DAO方法中,我们有一些(差)代码,如下所示:

String sql = "select {entity.*}, {entity2.*}, ...";
SQLQuery  query = sessionFactory.getCurrentSession().createSQLQuery(sql);
...
List<Entity> queryResult = query.list();
for (Object row : queryResult) {
     Object[] arr = (Object[])row;
     Entity entity - (Entity)arr[0];
     Entity2 entity2 - (Entity2)arr[1];
}

你能发现男生的错误吗?

queryResult不是List<Entity>,而是List<Object[]> - for (Object row : queryResult)

上发生了类强制转换异常

所以,现在我的问题是 - 键入擦除会发生什么?

Eclipse使用哪种编译器选项允许它在运行时忽略类转换这样的错误?

1 个答案:

答案 0 :(得分:0)

它可能不是JDK,而是其他不同的库。值得一试。

相关问题