我目前正在关注Head First Servlets和JSP这本书,我在第81页上提到了作者要求使用javac编译servlet。
我遇到了执行该行代码的问题。我认为我的JAVA_HOME等必须正确设置,因为我创建了一个示例HelloWorld.java和 编译它使用javac并创建了相应的.class文件。
我没有看到这个命令的逻辑,你指定了一个servlet-api.jar文件的类路径,然后给它另一个路径,以便它可以执行.java文件? 我想摆脱我现在所处的这个洞。这些是我的文件的路径:
C:\ Users \ Carlos L \ Tomcat \ apache-tomcat-8.0.28 \ bin \ servlet-api.jar 这是我的BeerSelect.java文件的位置: C:\ Users \ Carlos L \ Tomcat \ My Tomcat Projects \ beer-v1 \ src \ com \ example \ web \ BeerSelect.java
到目前为止我一直在估算: javac -classpath C:\ Users \ Carlos L \ Tomcat \ apache-tomcat-8.0.28 \ bin \ servlet-api.jar;类:。 d-classes src \ com \ example \ web \ BeerSelect.java
我收到此错误:
javac:无效标志:d-classes 用法:javac
这应该不是这么难。
答案 0 :(得分:0)
首先,是对一个jar进行编译然后针对另一个jar运行是有效的。特别是一个名为 -api .jar的jar通常只包含 构成应用程序接口即API的类,并且足以编译想要调用某些东西的程序,但实际上执行这些调用需要额外的内部类,这些类使用各种名称打包在罐子里,例如something-impl,something-body,plain something,或者多个jar,例如某些东西 - 基本的东西 - 核心东西 - 插件 - 选项等等。< / p>
其次,你的书显然是使用通用的(但不是必需的或通用的)方案,其中java源代码文件和编译的类文件在单独的,并行子树这里命名为src
和classes
。您的特定源文件显然是src\com\example\web\BeerSelect.java
。在这种情况下,运行java编译器的语法是:
javac -classpath (classpath) -d classes src\com\example\web\BeerSelect.java
# or abbreviate -classpath as -cp, or use envvar CLASSPATH instead
那个连字符然后是d,然后是空格,然后是目录名classes
,然后是另一个空格和源路径(或多个源路径)。
您最初不需要在类路径中指定classes
,只需指定servlet-api.jar
文件。如果您以后编译某些而不是src
子树的所有源文件,并且其他源文件的先前编译的类文件已经在classes
子树中,你确实需要servlet-api.jar
和classes
目录。在Windows上,您使用分号;
分隔类路径条目,在Unix上使用冒号:
,但不要混用它们。所以你的情况包括:
javac -classpath \path\to\servlet-api.jar;classes (rest as above)
除了您的路径名称显然包含空格C:\users\Carlos L\...
,因此您必须将该值放在引号中:
javac -classpath "C:\users\Carlos L\tomcat-8.0.28\bin\servlet-api.jar;classes" (rest as above)`
作为多次输入的替代方法,您可以将值放在envvar CLASSPATH
中set CLASSPATH="C:\users\Carlos L\tomcat-8.0.28\bin\servlet-api.jar;classes"
然后简单地做
javac -d classes src\com\example\web\BeerSelect.java
并且类似于项目中的任何其他类,当你来到他们时。