我正在尝试在编译应用程序时将.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文件存在。
有什么想法吗?
感谢。
答案 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