2010-03-12 24 views
1

我對JBOSS有點困惑,並在不同的JDK下運行它。例如,假設我正在運行JBOSS 5.1,並在開始之前將我的JAVA_HOME設置爲指向JDK5。我們還假設我的Java EE應用程序是在JDK6下編譯的。如果我部署的Java EE應用JBOSS,(JDK6下編譯)當我嘗試看看我的EJB的,我得到這樣的錯誤:JBoss - 是否應用程序必須在JBOSS運行在相同的jdk下編譯?

javax.naming.NameNotFoundException: tc_test_project not bound 

但是,如果我重新編譯JDK5下我的代碼,並重新部署它,它工作正常並能夠查找EJB。

同樣,我可以將JAVA_HOME設置爲JDK6並啓動JBOSS,並且我的代碼(在JDK6下編譯)在該場景下運行正常(它能夠找到EBJ等)。

因此,您的Java EE應用程序似乎需要在JBOSS服務器將要運行的相同JAVA_HOME下編譯,或者我誤解了某些東西?只是想得到確認,謝謝。

回答

6

應用程序必須與用於啓動JBOSS的相同或更低版本的JDK一起編譯。這是因爲應用程序將使用相同的JVM。

+0

感謝您的澄清。 – dcp 2010-03-12 20:15:16

-1

不,您應該可以使用JDK6進行編譯,只要您將-target 1.5作爲選項傳遞,以便輸出java 1.5類文件。如果您想標記爲使用更新的語言功能,請添加-source 1.5。

因此,只要您將應用程序將運行於其下的VM的版本(僅使用目標VM中存在的功能),就可以使用更新的JDK進行編譯。

編輯:我從來沒有聲稱這是一個好主意或權利,只有這是可能的。

+0

這不是那種打敗目的? – dcp 2010-03-12 19:47:49

+0

它的用處在於你的本地機器,所以你可以編譯到任何版本,因爲你的生產服務器可能有版本限制(由於合同或安全問題)。 – 2010-03-12 19:53:04

+2

這不是一件安全的事情。您可以輕鬆開發依賴於您的目標環境中不存在的類和API的代碼,從而爲您提供未發現錯誤的類。目標選項不會解決這個問題,它只解決語言功能問題。 – Robin 2010-03-12 20:08:10

相關問題