2011-11-11 48 views
1

將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使用哪種編譯器選項,允許它在運行時忽略類似這樣的錯誤?

+0

顯然你的ant構建腳本與你的eclipse項目不同步。部署時有什麼例外?你的螞蟻構建腳本是什麼? –

+0

應用程序部署並運行時,轉換類異常處於某些將對象投射到特定類的DAO方法中。 – blank

+0

A [Java數組是一個對象](http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html),所以在將數組賦值給/對象(如在你的循環聲明中)。奇怪的是未能檢測到編譯錯誤 - 如果'query.list()'不返回'List '。但是,如果確實返回'List ',則在Object [] arr =(Object [])行的ClassCastException將不可避免。 – sudocode

回答

0

這可能不是JDK,而是其他不同的庫。值得檢查。