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

我得到了这个错误: “只能导入一个类型。 XYZ 解析为一个包。”

有人解释了原因 给你,但我不知道我应该做什么来解决这个问题。仅供参考: 我正在使用 Eclipse。我已经添加了进行下面导入的代码。Java.util.* 进口工作良好。

 <%@ 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
200610 次浏览

您必须从包中导入一些内容,比如类、枚举或接口,如下所示:

import some.package.SomeClass;

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

import some.package.*;

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

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

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

import foo.bar.*;
Baz myBaz;

你可以利用

foo.bar.Baz myBaz;

没有进一步的详细信息,这听起来像是类的导入声明中的错误。如果所有导入声明都从包或单个类导入所有类,请检查:

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

剪辑

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

编辑2

这里是另一个论坛条目 ,这个问题似乎有相似之处,受害者通过重新安装 eclipse 解决了这个问题。我会先尝试一下——只用最必要的插件安装 Eclipse 的第二个实例,一个新的工作空间,将项目导入到那个干净的工作空间中,然后期待最好的结果... ..。

好吧,你并没有在你的 web 应用上提供足够的细节,但是我猜你有一个类似这样的 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的 JAR 位于 WEB-INF/lib之下。

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

那么

<%@ 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;" %>

我知道现在回复这个帖子有点太晚了,但是既然我没有看到任何明确的答案,我还是会这样做..。

你可以在日食的时候看看 META-INFMANIFEST.MF

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

Class-Path: WEB-INF/classes

我也经历过这种奇怪的错误,在改变字母大小写在一个类的名称。该文件没有按预期复制到 tomcat 服务器,我必须手动删除它并重新部署。也许是因为我使用不区分大小写的操作系统?

我也有过类似的问题。在 eclipse 中,我将我的项目与一个工作正常的示例项目(由 maven 原型生成)进行了比较。我发现我的项目在/中漏掉了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>

我的贡献: 我得到这个错误是因为我创建了一个名为3lp 的包。 但是,根据 java 规范,不允许将包命名为以数字开头。 我把它改为 _ 3lp,现在它可以工作了。

我在 Netbeans 犯了个错误。像大多数像这样突然出现的奇怪错误一样,我通过项目属性、更改 Source/Binary 格式(不管是什么,只是一些不同的东西)、进行清理和构建来解决这个问题。

我敢打赌,您有一个名为 org.ivec.eresearch.Knowledge portal.model. 类别(小型 c)的包,并且运行在 Windows 或 Mac 等不区分大小写的文件系统上。当类和包存在时,编译器似乎会混淆。

您可以将类重命名为“ Category”,或者将包重命名为“ Category”,这个错误就会消失。不幸的是,我不确定这是 Tomcat 还是 ECJ 错误。

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

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

您是否试图像我一样导入一个被重写的类?

如果是这样,则重写的类位于错误的包中,或者根本不存在。

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

如果您拼写错误的类名,或者类不在类路径上,JSP 处理器会说它“解析为一个包”,而不是说它不存在。这让我今天很抓狂,因为我一直没有看到我打错的字。

Class 文件分开,并将其粘贴到工作区中的相关包中。 刷新计划。

对我来说,这是一个错误的部署。部署正确,一切工作(检查 我的问题的详细信息)。

我收到了同样的错误消息,我的处理方法如下:

  1. 首先检查 Tomcat 发布 Web 应用程序的文件目录,例如 D: Java workspace.metadata.plugins org.eclipse.wst.server.core tmp1 wtpwebapps myDatableWEB-INF 类,我们通常把类放在这个目录中。如果这不是你放类的地方,那么你必须找到默认的位置,右键点击你的 web 应用根名—— > Build Path —— > Configure Build Bath... —— > 然后检查“ Source”选项卡,找到“ Default output file”的字段值。这里就是你们上课的地方。
  2. 您将看到尚未构建 XYZ 类。为了构建它,你可以点击菜单“ Project”—— > “ Clean...”—— > Select your web application to Clean。
  3. 完成后,尝试重新启动 tomcat 服务器,然后再次检查文件目录。你的班级应该在那里。至少对我有用。希望能有帮助。

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

<%@include file="...

使用动态 jsp import:

<jsp:include page="...

并且您的类型已经被“ static import”jsp 导入。当“动态导入”jsp-> 需要使用(然后导入)相同的类型时,会产生异常: “只能导入类型... ...”

我通过在 tomcat lib 目录中添加 jar 解决了这个问题。

所以我也有同样的问题,只是想给出我的解决方案。也许有人也面临着同样的问题。

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

当我查看我的。War 文件中的每个类都显示在正确的文件夹结构中。所以我不觉得有什么东西不见了。但是,当我检查 Intellij 的工件并将其与一个工作的工件进行比较时,我意识到,带有类和库的 WEB-INF 文件夹并不存在。

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

TLDR: Intellij 删除了我的。战争遗物。看看你的是不是也不见了。(工程项目结构-> 文物)

还有这个例外。

环境: Mac,Eclipse 使用 Servers 视图从 Eclipse 内部运行 Tomcat。

出于任何原因,Eclipse 没有将 classes文件夹复制到 WEB-INF

不知道,或者是 Eclipse 的错误,或者我遗漏了什么。

Tomcat 文件夹结构中有 Webapps/ROOT/,其中必须包含 WEB-INF 文件夹。如果您将 WEB-INF 放在 Webapps/tomcat 中,则不能定位类文件和 jar。

只是增加了另一种方法来实现这个奇怪的错误

在我看来,classpath使用 TOMCAT_HOME变量从 tomcat 获得了一些罐子。

我没有那个变量集,在我现在的工作中一年多都不需要它。但是这个特定的项目期望在 classpath中使用这个变量,Eclipse 不会告诉我发生了 classpath错误。

我得到了同样的错误,我的 java 文件和包没有任何问题。后来我注意到文件夹名称 WEB-INF 是这样写的“ WEB _ INF”。因此,只改正文件夹名就解决了这个问题

在从 Eclipse 运行时,我遇到了同样的问题。为了解决这个问题,我进入了 ConfigureBuildPath 并从构建路径中删除了 src 文件夹。然后关闭并重新开放该项目。然后,我将 src 文件夹添加到构建路径。Src 文件夹包含我试图访问的 Java 类。