Java导入错误

Java导入错误,java,import,classpath,apache-commons,Java,Import,Classpath,Apache Commons,我正在尝试导入org.apache.commons.fileupload.*但我被告知它不存在 我正在下载这个罐子: 并将其放置在类路径上。那么我做错了什么呢?罐子在你的盒子里吗?还可以查看关于通配符导入缺点的讨论。您在jar中看到您的类了吗?要确定您的类是否存在于jar中,请执行以下操作: # linux jar tvf jarname.jar | grep classname # win jar tvf jarname.jar | findstr classname 要了解您的类是否存在

我正在尝试导入org.apache.commons.fileupload.*但我被告知它不存在

我正在下载这个罐子:


并将其放置在类路径上。那么我做错了什么呢?

罐子在你的盒子里吗?还可以查看关于通配符导入缺点的讨论。

您在jar中看到您的类了吗?要确定您的类是否存在于jar中,请执行以下操作:

# linux
jar tvf jarname.jar | grep classname

# win
jar tvf jarname.jar | findstr classname
要了解您的类是否存在于多个JAR中,可以执行以下操作:

# linux
for f in `find . -name *.jar`; do echo $f; jar tvf $f | grep classname; done | less

很可能您正在考虑%CLASSPATH%环境变量。你不应该那样做。JAR文件必须放在动态WEB应用程序项目的/WEB-INF/lib文件夹中。默认情况下,该文件夹由webapp的类路径覆盖。只要您将JAR文件放到一个文件夹中,稍微体面一点的IDEEclipse、Netbeans等就会自动将其添加到构建路径中

在命令控制台中使用普通javac.exe进行编译时,必须在-cp参数中指定它

更新: 假设您使用的是Windows,并且位于源根文件夹中,以下是javac.exe的外观:

javac -cp .;/path/to/tomcat/lib/*;/path/to/WEB-INF/lib/* com/example/Servlet.java
注意:通配符仅适用于JDK1.6或更高版本。否则,您必须单独指定所有库。

因为您正在编写一个servlet,所以您可能已经创建了一个web项目。将fileupload jar放在WEB-INF/lib文件夹中,让IDE中的项目刷新后自动放在项目构建路径中


编辑看到您正在使用命令行,请确保提供类路径的完整jar文件路径,包括jar名称及其扩展名,用分号分隔。

您正在编写web应用程序吗?如何将其放置在类路径中?如何构建应用程序?使用ant、maven、eclipse?@精英绅士-我正在编写一个servlet@Oscar-我正在使用set classpath=%classpath%等@CoolBeans-我是通过命令行来完成的。你能发布你用来构建项目的所有命令吗?我说我把JAR添加到了类路径中。我说的是检查以确保jvm实际上使用了你认为是的类路径。当我包含servlet-api.JAR时,我通过“设置类路径”来包含它,那么这有什么不同呢现在从评论中可以看到,您正在命令控制台中执行此操作——老实说,这是我没有预料到的,因为这相当麻烦。在这种情况下,需要将commons-fileupload.jar的完整路径添加到-cp参数中,并根据操作系统的不同用分号分隔。不要忘记在包含空格的单独路径周围加引号。当然,您可以使用%CLASSPATH%环境变量,但这被认为是不好的做法。最好写一个.bat或.cmd文件,它在命令中有正确的-cp参数。好吧,我现在开始工作了,我知道命令行很麻烦,但我喜欢我喜欢的。毕竟,没有人说6502 asm是流线型的。我需要做更多的修改来找出哪里出了问题,但是使用javac-cp做的很好。@BalusC-使用bat文件会更好。使用Ant或Maven这样的跨平台构建工具会更好。@Mike:我完全同意这一点。IDE将是顶部的奶油。但也许这只是OP在Java中的第一步。然后最好让他以这种方式进行处理,这样他最终会更好地理解称为类路径的现象,并从本质上更好地理解构建工具在幕后所做的工作: