Java JBoss-应用程序是否必须在运行JBoss的同一jdk下编译?

Java JBoss-应用程序是否必须在运行JBoss的同一jdk下编译?,java,jboss,jakarta-ee,Java,Jboss,Jakarta Ee,我对JBOSS和在不同JDK下运行它有点困惑。例如,假设我正在运行JBoss5.1,在启动它之前,我将JAVA_HOME设置为指向JDK5。我们还假设我的JavaEE应用程序是在JDK6下编译的。如果我将JDK6下编译的Java EE应用程序部署到JBOSS,当我尝试查找EJB时,会出现如下错误: javax.naming.NameNotFoundException: tc_test_project not bound 但是如果我在JDK5下重新编译代码并重新部署它,它工作得很好,并且能够正常

我对JBOSS和在不同JDK下运行它有点困惑。例如,假设我正在运行JBoss5.1,在启动它之前,我将JAVA_HOME设置为指向JDK5。我们还假设我的JavaEE应用程序是在JDK6下编译的。如果我将JDK6下编译的Java EE应用程序部署到JBOSS,当我尝试查找EJB时,会出现如下错误:

javax.naming.NameNotFoundException: tc_test_project not bound
但是如果我在JDK5下重新编译代码并重新部署它,它工作得很好,并且能够正常查找EJB

同样,我可以将JAVA_HOME设置为JDK6并启动JBOSS,我在JDK6下编译的代码在该场景下运行正常,它可以找到EBJs,等等


因此,您的JavaEE应用程序似乎需要在JBOSS服务器运行的同一个Java_主页下编译,或者我误解了什么?只是想得到确认,谢谢。

应用程序必须使用用于启动JBOSS的JDK的相同或更低版本进行编译。这是因为应用程序将使用相同的JVM。

应用程序必须使用用于启动JBOSS的JDK的相同或更低版本进行编译。这是因为应用程序将使用相同的JVM。

不,只要您将-target 1.5作为一个选项传递,那么您应该能够使用JDK6进行编译,以便它输出java 1.5类文件。如果您希望被标记为使用较新的语言功能,请添加-source 1.5

因此,只要您以运行应用程序的VM版本为目标,并且只使用目标VM中存在的功能,就可以使用较新的JDK编译它


编辑:我从未声称这是一个好主意或正确的想法,只是说这是可能的。

不,您应该能够使用JDK6进行编译,只要您将-target 1.5作为一个选项传递,以便它输出java 1.5类文件。如果您希望被标记为使用较新的语言功能,请添加-source 1.5

因此,只要您以运行应用程序的VM版本为目标,并且只使用目标VM中存在的功能,就可以使用较新的JDK编译它


编辑:我从未声称这是一个好主意或正确的想法,只是说这是可能的。

这不是违背了目的吗?它的用处在于您的本地框,这样您就可以编译到任何版本,因为您的生产服务器可能因合同或安全问题而有版本限制。这不是一件安全的事情。您可以轻松地开发依赖于目标环境中不存在的类和API的代码,从而为您提供类未发现错误。“目标选项”不会解决这个问题,它只解决语言功能。@Robin您可以用它来解决您提到的问题。@Pascal-谢谢您提供的信息。非常适合检查现有代码库的兼容性,尽管如果它是新代码,我仍然会使用适当的JDK。这不是违背了目的吗?它的有用性在您的本地框中,因此您可以编译到任何版本,由于合同或安全问题,您的生产服务器可能有版本限制。这样做不安全。您可以轻松地开发依赖于目标环境中不存在的类和API的代码,从而为您提供类未发现错误。“目标选项”不会解决这个问题,它只解决语言功能。@Robin您可以用它来解决您提到的问题。@Pascal-谢谢您提供的信息。非常适合检查现有代码库的兼容性,尽管如果是新代码,我仍然会使用适当的JDK。