javac -cp似乎不起作用

时间:2014-03-02 12:32:37

标签: java glassfish classpath javac

我正在尝试在编译应用程序时将.jar文件添加到我的java类路径中,当我指定这样的位置时它似乎不起作用:

javac CreateAccount.java -cp .:~/glassfish4/glassfish/modules/javax.servlet-api.jar -d classes

输出:

CreateAccount.java:3: error: package javax.servlet.annotation does not exist import javax.servlet.annotation.WebServlet; 
CreateAccount.java:5: error: package javax.servlet does not exist import javax.servlet.*;
CreateAccount.java:6: error: package javax.servlet.http does not exist import javax.servlet.http.*;

还尝试使用/ home代替tidle(〜),但也不起作用。但是,当我将有问题的.jar文件复制到CreateAccount.java所在的同一文件夹时,请改为:

javac CreateAccount.java -cp .:javax.servlet-api.jar -d classes

似乎工作正常。我检查路径肯定是正确的,并且jar文件存在。

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

如果CreateAccount仅取决于javax.servlet-api.jar,并且您的JAR路径是否正确,则删除对当前工作目录的引用;说:

javac -cp ~/glassfish4/glassfish/modules/javax.servlet-api.jar -d classes CreateAccount.java

(注意:源文件应放在javac选项之后。)

要验证javax.servlet-api.jar的路径,请尝试以下操作:

jar tf ~/glassfish4/glassfish/modules/javax.servlet-api.jar

您应该会看到javax.servlet-api.jar中所有类的列表;如果你不这样,路径是不正确的。 (当然,您也可以使用ls来测试路径。)

代字号~是当前用户主目录的缩写,因此假设这是Linux而你是user1915747,则上述内容相当于:

javac -cp /home/user1915747/glassfish4/glassfish/modules/javax.servlet-api.jar -d classes CreateAccount.java

通过将.:术语添加到类路径,您将添加当前工作目录(.)和分隔符(:)。如果这导致编译中断,则编译器会在当前工作目录中而不是javax.servlet-api.jar中找到匹配项。如上所述,如果您的源文件不需要当前工作目录中的任何内容,请删除该术语,或将该术语放在最后;以机智

javac -cp /home/user1915747/glassfish4/glassfish/modules/javax.servlet-api.jar:. -d classes CreateAccount.java