2010-07-08 56 views
1

我写了一个java代码并编译它。 (foo1.6.class) 根据我的搜索,我的本地机器有Java 1.6,而我上传的tomcat服务器foo1.6.class只接受版本号1.5这意味着我必须让Java 1.5编译?java - 编译文件时可以选择版本号吗?

我认为这是导致版本号错误如下所示的原因。

我的问题是,有没有什么办法可以使用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

基本上相同: http://stackoverflow.com/questions/1710933/will-jre-1-4-support-classes-compiled-with-java-1-5-1-6(注意那里接受的答案不是最高票数,但是这两个都给出了比本页面当前任何答案都更好的信息。) – 2010-07-09 01:56:57

+0

@Kevin,那么正确的操作是请求关闭作为副本。 – 2010-07-09 03:32:32

+0

我总是对“接近完全相同”的措辞感到困扰。在那里做什么“确切”的词? – 2010-07-09 15:31:07

回答

10

您可以使用javac -target 1.5 -source 1.5

只有当您还使用不高于目标的源兼容版本(源版本低于1.4的源代码版本)时,Java编译器才允许使用低于当前目标版本号的版本号。

+0

谢谢你们!我跑了: javac -cp。 -target 1.5 -source 1.5 /dir1/foo.java 并成功编译。上传到网络服务器,并等待效果采取..... – 2010-07-08 20:39:17

+0

-1这是不安全的。看到这个问题实际上是一个重复的问题(我将在上面找到并发布上述注释)。 – 2010-07-09 01:55:01

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

即使在告诉某人他们应该检查了-help选项时,也可能会很礼貌。这不是。 – DJClayworth 2010-07-08 20:41:46

+2

如果你认为我是不礼貌的,@DJ,当你看到互联网上的不礼貌时,你可能想掩盖你的眼睛。 – 2010-07-08 21:02:43

+0

我其实觉得这很有帮助。对于任何不了解它的人来说,第一行是一个很好的“如何”。没有讽刺或无礼的评论。只有最薄的皮肤的人会在这里冒犯。 – duffymo 2010-07-08 21:48:23

2

你的情况正确的答案是x4u指出的-source和-target标志。

您问是否需要卸载Java 6才能安装Java 5.这很少需要。 JDK提供了“javac”编译器,并且可以安装许多这样的编译器。您可以考虑在不卸载Java 6的情况下安装Java 5 JDK,然后使用该安装中的javac进行编译。这将确保您的代码将运行在Java 5运行时(这是我个人的做法)。

相关问题