引子:把网上一个项目中的 Servlet 代码下载的本地后,出现了入下的错误:java.lang.UnsupportedClassVersionError,含义是高版本的 JDK 编译的 Java class 文件试图在较低版本的 JVM 上运行导致的错误。
既然如此,就需要重新编译一遍相关 Java 文件了。
首先 javac 命名 JDK 提供的编译软件,对于此命令,所需的 option 如下:
-encoding
:指定 Java 源代码的编码方式,虽然都 2020 了基本上都是 UTF-8 编码的,其是默认的,一般不用设置,但是我下载的版本恰为 GBK,所以需要此 option;-sourcepath
:指定 Java 源文件的目录位置,如果命令行的当前目录即为源代码所在位置,那么可以需要此命令;-d
:由于 WebApp 项目中源代码和字节码是分目录存放的,所以需要将源代码编译至指定目录中;-cp
或 -classpath
:由于 Servlet 类都继承于 javax.servlet 等类,所以只要引入这些类,才能正确编译。我的源代码目录为:
/Library/Tomcat/webapps/helloapp/src/mypack
指定的编译目录为:
/Library/Tomcat/webapps/helloapp/WEB-INF/classes/mypack
然后第三类库位于 Tomcat 中,目录为:
/Library/Tomcat/lib
所以最终的编译命令为:
javac -encoding GBK -sourcepath /Library/Tomcat/webapps/helloapp/src/mypack/*.java -cp /Library/Tomcat/lib/servlet-api.jar -d /Library/Tomcat/webapps/helloapp/WEB-INF/classes
注意,-cp
option 一般需要写出所需的 jar 包,如果不想写出,可以替换为 -Djava.ext.dirs
option 来指定第三方架包所在目录。
javac -encoding GBK -sourcepath /Library/Tomcat/webapps/helloapp/src/mypack/*.java -Djava.ext.dirs=/Library/Tomcat/lib -d /Library/Tomcat/webapps/helloapp/WEB-INF/classes