Java错误:只能导入类型。 XYZ解析为一个包

时间:2009-12-07 07:46:15

标签: java jsp tomcat classpath

我收到错误:“只能导入一个类型.XYZ会解析为一个包。”

有人解释了原因here,但我不确定我应该做些什么来解决这个问题。仅供参考:我正在使用Eclipse。我添加了下面导入的代码。 java.util。* import工作正常。

 <%@ page import="java.util.*"%>
 <%@ page import="org.eresearch.knowledgeportal.model.Category"%>
 <%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao"%>

 <% 
  CategoryDao catDao = new CategoryDao();
  ArrayList<Category> catList = catDao.selectCategory();

 //
 %>

编辑:实际错误如下:

 org.apache.jasper.JasperException: Unable to compile class for JSP: 

 An error occurred at line: 7 in the generated java file
 Only a type can be imported. org.eresearch.knowledgeportal.model.Category resolves to a package

25 个答案:

答案 0 :(得分:62)

嗯,你并没有真正提供关于你的webapp的足够详细信息,但我的猜测是你有一个这样的JSP:

<%@ page import="java.util.*,x.y.Z"%> 

在类路径中找不到x.y.Z(即WEB-INF/classes下也不存在WEB-INF/lib的JAR)。

仔细检查您在Tomcat上部署的WAR是否具有以下结构:

my-webapp
|-- META-INF
|   `-- MANIFEST.MF
|-- WEB-INF
|   |-- classes
|   |   |-- x
|   |   |   `-- y
|   |   |       `-- Z.class
|   |   `-- another
|   |       `-- packagename
|   |           `-- AnotherClass.class
|   |-- lib
|   |   |-- ajar.jar
|   |   |-- bjar.jar
|   |   `-- zjar.jar
|   `-- web.xml
|-- a.jsp
|-- b.jsp
`-- index.jsp

x.y.Z.class下包含WEB-INF/lib的JAR。

答案 1 :(得分:33)

好的,我刚解决了。在上一次导入中,我添加了一个“;”通过复制其他代码示例。我想这是标准的行结束所必需的。

所以

<%@ page import="java.util.*" %>
<%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao" %>
<%@ page import="org.eresearch.knowledgeportal.model.Category" %>

成了

 <%@ page import="java.util.*" %>
 <%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao" %>
 <%@ page import="org.eresearch.knowledgeportal.model.Category;" %>

答案 2 :(得分:7)

如果您将类名拼写错误或类不在类路径上,则JSP处理器会将其解析为&#34;解析为包&#34;而不是它不存在。这让我感到疯狂,因为我一直没有看到我做过的错字。

答案 3 :(得分:3)

没有进一步的细节,它听起来像是类的导入声明中的错误。检查是否所有导入声明都从包或单个类导入所有类:

import all.classes.from.package.*;
import only.one.type.named.MyClass;

修改

好的,在编辑之后,看起来像是一个jsp问题。

修改2

Here is another forum entry,问题似乎有相似之处,受害者通过重新安装eclipse解决了这个问题。我首先尝试一下 - 安装第二个eclipse实例,只需要最必要的插件,一个新的工作空间,导入到干净工作空间的项目,以及最好的希望......

答案 4 :(得分:3)

我在Netbeans中遇到了这个错误。正如大多数奇怪的错误一样,我通过转到项目属性,更改源/二进制格式(无关紧要,只是不同的东西)来解决它,并进行清理和构建。

答案 5 :(得分:3)

我通过在tomcat lib目录中添加jar来解决它。

答案 6 :(得分:1)

我知道回复这篇文章有点太晚了但是因为我没有看到任何明确的答案我还是会这么做......

你可能想看看日食中MANIFEST.MF的{​​{1}}。

然后您可能需要添加类文件的路径,如..

META-INF

答案 7 :(得分:1)

在更改了类名称中的字母大小写后,我也遇到了这个奇怪的错误。该文件未按预期复制到tomcat服务器,我不得不手动删除它并重新部署。也许是因为我使用不区分大小写的操作系统?

答案 8 :(得分:1)

对我来说这是一个错误的部署。正确部署后,一切正常(详情请查看my question)。

答案 9 :(得分:0)

只需添加另一种实现此奇怪错误的方法

对我来说,发生的事情是classpath通过使用TOMCAT_HOME变量从tomcat提取了一些罐子。

我没有设置该变量,并且在过去的一年中从未使用过它。但是这个特定的项目期望classpath中有这个变量,而Eclipse不会告诉我发生了classpath错误。

答案 10 :(得分:0)

这通常在混合(在相同的jsp页面中)静态jsp导入时发生:

<%@include file="...

使用动态jsp导入:

<jsp:include page="...

并且您的类型已经由“静态导入”jsp导入。当“动态导入”jsp - &gt;需要使用相同类型(然后导入)时这会生成异常:“只能导入一个类型......”

答案 11 :(得分:0)

所以我遇到了同样的问题,只想给出解决方案。也许有人遇到同样的问题。

我已经正确配置了我的工件,但是intellij不知何故混合了一些东西,并删除了其中一个工件中的WEB-INF文件夹。

当我查看.war文件的内容时,每个类都位于正确的文件夹结构中。因此,我认为没有任何遗漏。但是,当我检查Intellij中的工件并将其与正常工作的工件进行比较时,我意识到,不存在带有类和库的WEB-INF文件夹。

将它们添加到工件中,它应该可以工作。

TLDR:Intellij删除了我的.war工件中的WEB-INF文件夹。只要检查您的失踪者也是如此。 (项目Strucutre->工件)

答案 12 :(得分:0)

也有这个例外。

环境:带有Eclipse的Mac在Eclipse内部使用“服务器”视图运行Tomcat。

由于任何原因,Eclipse不会将classes文件夹复制到WEB-INF。手动复制classes文件夹后,一切正常。

不知道,或者是Eclipse错误或我错过了一些东西。

答案 13 :(得分:0)

tomcat文件夹结构具有Webapps / ROOT /,其中必须存在WEB-INF文件夹。如果将WEB-INF放在Webapps /中,tomcat不会找到类文件和jar。

答案 14 :(得分:0)

我通过将包含导入类的jar文件添加到WEB-INF/Lib来解决它。

答案 15 :(得分:0)

我遇到了同样的错误,我的java文件和软件包没有任何问题。后来我注意到文件夹名称WEB-INF的写法是这样的“ WEB_INF”。因此,只需更正文件夹名称即可解决问题

答案 16 :(得分:0)

从Eclipse运行时,我遇到了同样的问题。为了解决该问题,我进入了“ Configure Build Path”并从构建路径中删除了src文件夹。然后关闭并重新打开该项目。然后,我将src文件夹添加到了构建路径。 src文件夹包含我尝试访问的Java类。

答案 17 :(得分:0)

您是否尝试像我一样导入被覆盖的类?

如果是这样,你的被覆盖的类是在错误的包中,或者根本就不存在。

创建或将类移动到正确的位置(src / [package.package]。[class])可以解决您的问题。

答案 18 :(得分:0)

你必须从包中导入一些东西,比如类,枚举或接口,如下所示:

import some.package.SomeClass;

或者,从包中导入所有内容(不推荐)

import some.package.*;

编辑:也许我读得不够近。您尝试从文件系统中导入的包在哪里?它在WEB-INF / lib下吗?

答案 19 :(得分:0)

如果您使用Maven并将Java类打包为JAR,请确保JAR是最新的。仍然假设JAR当然在你的类路径中。

答案 20 :(得分:0)

我敢打赌,你有一个叫做org.ivec.eresearch.knowledgeportal.model。 category (小c)的软件包,并且运行在像Windows这样的非区分大小写的文件系统上或者Mac。当类和包存在时,似乎编译器会感到困惑。

您可以重命名“类别”类或包“类别”,此错误将消失。不幸的是我不确定这是Tomcat还是ECJ的错误。

答案 21 :(得分:0)

我的贡献:我收到此错误是因为我创建了一个名为3lp的包。 但是,根据java规范,您不能使用数字命名您的包。 我将其更改为_3lp,现在可以正常工作。

答案 22 :(得分:0)

我有类似的问题。在eclipse中,我将我的项目与一个工作正常的示例项目(由maven原型生成)进行了比较。我发现我的项目错过了/.classpath文件中的2行。我复制了这两行,它解决了这个问题。即使我在项目首选项中设置了构建路径,但由于某些原因,eclipse没有相应更新。

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java"/>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
    ...
</classpath>

答案 23 :(得分:0)

还有更多细节吗? (这是在链接网页中的JSP中吗?)

如果是这样,您可以随时使用完全限定的类名 而不是:

import foo.bar.*;
Baz myBaz;

你可以使用

foo.bar.Baz myBaz;

答案 24 :(得分:-1)

我有相同的错误消息,我的处理方式如下:

  1. 首先去检查Tomcat发布Web应用程序的文件目录,例如D:\ Java \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp1 \ wtpwebapps \ myDatatable \ WEB-INF \ classes,我们通常在其中放置我们的类。如果这不是您放置课程的地方,那么您必须通过右键单击您的Web应用程序根名称 - &gt;构建路径 - &gt;配置构建浴幕来确定默认位置... - &gt ;然后检查&#34;来源&#34;选项卡并找出&#34;默认输出文件夹&#34;的字段值。这将是Tomcat放置课程的地方。
  2. 您会看到尚未构建XYZ类。为了构建它,您可以转到菜单&#34;项目&#34; - &gt;&#34;清洁...&#34; - &gt;选择要清理的Web应用程序。
  3. 完成后,尝试重新启动tomcat服务器并再次检查文件目录。你的班级应该在那里。至少它对我有用。希望它有所帮助。