在部署作为在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使用哪种编译器选项允许它在运行时忽略类转换这样的错误?
答案 0 :(得分:0)
它可能不是JDK,而是其他不同的库。值得一试。