我写了一段java代码并编译了它。 (foo1.6.class) 根据我的搜索,我的本地机器有Java 1.6,我上传的tomcat服务器foo1.6.class只接受版本号1.5这意味着我必须编译Java 1.5?
我认为这是导致坏版本号错误如下所示的原因。
我的问题是,有什么方法可以使用1.5版本号编译我的Java文件? 看着javac cmd但看起来它不是选项的一部分。但我不认为删除1.6和安装Java 1.5因为这个原因也不是很好的选择。人们如何处理这种情况?
提前致谢!
exception
javax.servlet.ServletException: Bad version number in .class file (unable to load class resume_builder.ResumeBuilder)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:273)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause
java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class resume_builder.ResumeBuilder)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1884)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:889)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1353)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1232)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Class.java:2357)
java.lang.Class.getConstructor0(Class.java:2671)
java.lang.Class.newInstance0(Class.java:321)
java.lang.Class.newInstance(Class.java:303)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:142)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
答案 0 :(得分:10)
您可以使用javac -target 1.5 -source 1.5
。
只有当您使用不高于目标的源兼容性版本时,Java编译器才允许您使用低于其当前目标版本号的版本(对于低于1.4的源版本,有一些代码)。
答案 1 :(得分:4)
javac -help
Usage: javac <options> <source files>
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are used
-classpath <path> Specify where to find user class files and annotation processors
-cp <path> Specify where to find user class files and annotation processors
-sourcepath <path> Specify where to find input source files
-bootclasspath <path> Override location of bootstrap class files
-extdirs <dirs> Override location of installed extensions
-endorseddirs <dirs> Override location of endorsed standards path
-proc:{none,only} Control whether annotation processing and/or compilation is done.
-processor <class1>[,<class2>,<class3>...]Names of the annotation processors to run; bypasses default discovery process
-processorpath <path> Specify where to find annotation processors
-d <directory> Specify where to place generated class files
-s <directory> Specify where to place generated source files
-implicit:{none,class} Specify whether or not to generate class files for implicitly referenced files
-encoding <encoding> Specify character encoding used by source files
-source <release> Provide source compatibility with specified release
-target <release> Generate class files for specific VM version
-version Version information
-help Print a synopsis of standard options
-Akey[=value] Options to pass to annotation processors
-X Print a synopsis of nonstandard options
-J<flag> Pass <flag> directly to the runtime system
注意-source和-target参数?
答案 2 :(得分:2)
在你的情况下,正确的答案是x4u指出的-source和-target标志。
您询问是否需要卸载Java 6才能安装Java 5.这很少需要。 “javac”编译器随JDK一起提供,并且可以安装许多这样的编译器。您可以考虑在不卸载Java 6的情况下安装Java 5 JDK,然后使用该安装中的javac进行编译。这将确保您的代码将使用Java 5运行时运行(并且是我个人所做的)。