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

Posted

技术标签:

【中文标题】Java 错误:只能导入一个类型。 XYZ 解析为一个包【英文标题】:Java error: Only a type can be imported. XYZ resolves to a package 【发布时间】:2010-12-23 22:16:09 【问题描述】:

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

有人解释了原因here,但我不确定我应该怎么做才能解决这个问题。仅供参考:我正在使用 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

【问题讨论】:

如果您可以发布代码并提供环境的更多详细信息,将会有所帮助。 大部分代码只是 html。由于它在这一点上倒下,我没有太大进展。我正在使用 Tomcat 6,但我正在通过 Eclipse 调试选项运行。如果还有什么我可以提供的,请告诉我。 Scriptlet 是一种不好的做法:***.com/questions/1831238/jsp-for-business-layer/… 使用 servlet。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

我没有设置该变量,并且在我目前的工作中工作了一年多以来从未需要它。但是这个特定的项目在 classpath 中期待这个变量,而 Eclipse 不会告诉我有一个 classpath 错误发生。

【讨论】:

【参考方案4】:

tomcat 文件夹结构中有 Webapps/ROOT/ 里面必须有 WEB-INF 文件夹。如果您将 WEB-INF 放在 Webapps/tomcat 中,则无法定位类文件和 jar。

【讨论】:

【参考方案5】:

也遇到了这个异常。

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

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

不知道,或者是 Eclipse 错误或者我错过了什么。

【讨论】:

【参考方案6】:

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

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

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

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

TLDR:Intellij 删除了我的 .war 工件中的 WEB-INF 文件夹。只需检查您的是否也丢失了。 (项目结构 -> 工件)

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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

<%@include file="...

动态jsp导入:

<jsp:include page="...

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

【讨论】:

【参考方案9】:

我有同样的错误信息,我的处理方法如下:

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

【讨论】:

【参考方案10】:

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

【讨论】:

看来错误的部署是这个问题的主要原因,重新部署对我有用。【参考方案11】:

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

所以

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

【讨论】:

AFAIK 添加分号会出错,效果与删除行相同。 这为我解决了一个问题。但是,在我删除分号后,它又可以工作了。 分号会导致语法错误,但会在 eclipse 中触发重新检查,在删除分号后,导入恢复正常,没有红线下的摆动。奇怪但有效!跨度> 【参考方案12】:

单独生成 .class 文件并将其粘贴到相关包中到工作区中。 刷新项目。

【讨论】:

【参考方案13】:

如果您拼写错误的类名或该类不在类路径中,JSP 处理器将说它“解析为一个包”而不是它不存在。今天这让我发疯了,因为我一直没有看到我犯的错字。

【讨论】:

我在手动将类文件复制到我的 Tomcat webapps/myApp/WEB-INF/classes 目录后看到了这个问题。 Tomcat的反弹修复了它。而且我猜重新部署也可以。 确实,消息很糟糕。即使他们不想费心区分这两种情况,至少应该是“找不到类或解析为包”。【参考方案14】:

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

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

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

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

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

【讨论】:

【参考方案17】:

我知道现在回复这篇文章有点太晚了,但由于我没有看到任何明确的答案,我还是会这样做......

您可能想在 Eclipse 中查看 META-INF 中的 MANIFEST.MF

那么您可能需要添加类文件的路径,例如..

Class-Path: WEB-INF/classes

【讨论】:

绝对不是。这是默认设置。【参考方案18】:

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

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

【讨论】:

【参考方案19】:

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

【讨论】:

谢谢!哇,不敢相信这有效。下次遇到奇怪的 Netbeans 错误时,我会试试这个。我不知道为什么 Netbeans 会这样。现在我安装了一个新版本。 好的,我已经遇到过两次这个问题,你的技巧两次都解决了。 我又遇到了这个。这次我实际上是通过重命名/重构导致问题的包名称,进行干净+构建,然后重命名/重构回原来的样子,然后再进行一次干净+构建来解决它。这也起到了作用。【参考方案20】:

我的贡献:我收到这个错误是因为我创建了一个名为 3lp 的包。 但是,根据 java 规范,您不能以数字开头命名您的包。 我把它改成了_3lp,现在可以了。

【讨论】:

【参考方案21】:

我遇到了类似的问题。在 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>

【讨论】:

【参考方案22】:

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

【讨论】:

宾果游戏。就我而言,问题类在另一个项目中,正如我所料,Netbeans 在更改时没有将其复制到 Tomcat 库中。【参考方案23】:

嗯,你并没有真正提供足够的关于你的 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 下。

【讨论】:

谢谢。一切看起来都像你说的那样,这就是它如此混乱的原因。 赞,但package 是非法包标识符;) 当然“只能导入一个类型。XYZ 解析为一个包”真正的意思是“在类路径中找不到依赖项”。当然!【参考方案24】:

如果没有更多细节,这听起来像是类的导入声明中的错误。检查所有导入声明是从包中导入所有类还是从单个类中导入:

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

编辑

好的,编辑后,看起来是jsp问题。

编辑 2

Here is another forum entry,问题似乎有相似之处,受害者通过重装eclipse解决了。我会先尝试一个 - 安装第二个 eclipse 实例,其中只有最必要的插件、一个新工作区、导入该干净工作区的项目,并希望最好......

【讨论】:

【参考方案25】:

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

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

import foo.bar.*;
Baz myBaz;

你可以使用

foo.bar.Baz myBaz;

【讨论】:

【参考方案26】:

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

import some.package.SomeClass;

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

import some.package.*;

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

【讨论】:

以上是关于Java 错误:只能导入一个类型。 XYZ 解析为一个包的主要内容,如果未能解决你的问题,请参考以下文章

“java.rmi.Remote 无法解析为类型”是啥意思?

扫描仪无法解析为类型

Constraint 无法解析为类型

Java:Lang 错误“ComSci”无法解析为类型

怎样用origin画出三维图

如何导入这个 Ant Design TypeScript 界面?