天天看点

编译 Servlet 代码

引子:把网上一个项目中的 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