將Jenkins上運行的Ant構建腳本部署到Websphere 6.1上後,我的運行時類轉換異常。拋出的類異常在一些DAO方法中,它們將從SQL查詢返回的對象轉換爲特定的類。使用Ant/jenkins生成類異常在WebSphere 6.1上生成EAR
如果我從Eclipse(RAD)內部生成EAR,那麼不會發生類轉換異常,並且將來自jenkins/ant生成的耳朵的類文件與來自Eclipse的耳朵進行比較,顯示不同的文件大小和內容。
我想讓ant用Webspehre 6.1提供的JDK執行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運行,而不是僅僅執行的javac與此JDK。有沒有辦法檢查?
我已經將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使用哪種編譯器選項,允許它在運行時忽略類似這樣的錯誤?
顯然你的ant構建腳本與你的eclipse項目不同步。部署時有什麼例外?你的螞蟻構建腳本是什麼? –
應用程序部署並運行時,轉換類異常處於某些將對象投射到特定類的DAO方法中。 – blank
A [Java數組是一個對象](http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html),所以在將數組賦值給/對象(如在你的循環聲明中)。奇怪的是未能檢測到編譯錯誤 - 如果'query.list()'不返回'List'。但是,如果確實返回'List ',則在Object [] arr =(Object [])行的ClassCastException將不可避免。 –
sudocode