我收到错误消息:“只能导入一个类型。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
好吧,您并没有真正提供有关您的 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;" %>
如果您拼写错误的类名或该类不在类路径中,JSP 处理器将说它“解析为一个包”而不是它不存在。今天这让我发疯了,因为我一直没有看到我犯的错字。
我在 Netbeans 中遇到了这个错误。与大多数像这样突然出现的奇怪错误一样,我通过转到项目属性,更改源/二进制格式(无关紧要,只是不同的东西)并进行清理和构建来解决它。
我通过在tomcat lib目录中添加jar来解决它。
如果没有更多细节,这听起来像是类的导入声明中的错误。检查所有导入声明是从包中导入所有类还是从单个类中导入:
import all.classes.from.package.*;
import only.one.type.named.MyClass;
编辑
好的,编辑后,看起来是jsp的问题。
编辑 2
Here is another forum entry,问题似乎有相似之处,受害者通过重装eclipse解决了。我会先尝试一个 - 安装第二个 eclipse 实例,其中只有最必要的插件、一个新的工作区、导入到那个干净的工作区的项目,并希望最好......
也得到了这个例外。
环境:带有 Eclipse 的 Mac,使用 Servers 视图从 Eclipse 内部运行 Tomcat。
出于任何原因,Eclipse 不会将 classes
文件夹复制到 WEB-INF
。手动复制 classes
文件夹后,一切正常。
不知道,或者它是 Eclipse 错误或者我错过了什么。
在更改班级名称的字母大小写后,我也遇到了这个奇怪的错误。该文件没有按预期复制到tomcat服务器,我不得不手动删除它并重新部署。也许是因为我使用不区分大小写的操作系统?
我知道回复这篇文章有点太晚了,但由于我没有看到任何明确的答案,我还是会这样做......
您可能想在 Eclipse 中查看 META-INF
中的 MANIFEST.MF
。
那么您可能需要添加类文件的路径,例如..
Class-Path: WEB-INF/classes
单独生成 .class 文件并将其粘贴到工作区的相关包中。刷新项目。
这通常发生在混合(在同一个 jsp 页面中)静态 jsp 导入时:
<%@include file="...
使用动态jsp导入:
<jsp:include page="...
并且您的类型已由“静态导入”jsp 导入。当“动态导入”jsp需要使用(然后导入)相同类型时 - >这会生成异常:“只能导入一个类型......”
您必须从包中导入某些内容,例如类、枚举或接口,如下所示:
import some.package.SomeClass;
或者,从包中导入所有内容(不推荐)
import some.package.*;
编辑:也许我读得不够仔细。您尝试从文件系统中导入的包在哪里?它在 WEB-INF/lib 下吗?
有更多细节吗? (这是在链接网页中的 JSP 中吗?)
如果是这样,您总是可以只使用完全限定的类名。而不是:
import foo.bar.*;
Baz myBaz;
您可以使用
foo.bar.Baz myBaz;
我有一个类似的问题。在 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>
我的贡献:我收到此错误是因为我创建了一个名为 3lp 的包。但是,根据 java 规范,您不能将包命名为以数字开头。我将其更改为_3lp,现在它可以工作了。
我敢打赌,您有一个名为 org.ivec.eresearch.knowledgeportal.model.category(小 c
)的包,并且在 Windows 或 Mac 等不区分大小写的文件系统上运行。当类和包存在时,编译器似乎会感到困惑。
您可以重命名类“类别”或包“类别”,此错误将消失。不幸的是,我不确定这是 Tomcat 还是 ECJ 错误。
如果您使用 Maven 并将 Java 类打包为 JAR,请确保 JAR 是最新的。当然,仍然假设 JAR 在您的类路径中。
我通过将包含导入的类的 jar 文件添加到 WEB-INF/Lib
来解决它。
您是否尝试像我一样导入覆盖的类?
如果是这样,则您的覆盖类位于错误的包中,或者根本不存在。
创建或将类移动到正确的位置(src/[package.package].[class])可以解决您的问题。
所以我有同样的问题,只是想给出我的解决方案。也许有人面临同样的问题。
我已经正确配置了我的工件,但不知何故 intellij 混合了一些东西并删除了我的一个工件中的 WEB-INF 文件夹。
当我查看 .war 文件的内容时,每个类都存在于正确的文件夹结构中。所以我不认为缺少任何东西。但是当我检查 Intellij 中的工件并将其与工作工件进行比较时,我意识到带有类和库的 WEB-INF 文件夹不存在。
将它们添加到工件中,它应该可以工作。
TLDR:Intellij 删除了我的 .war 工件中的 WEB-INF 文件夹。只需检查您的是否也丢失了。 (项目结构 -> 工件)
tomcat 文件夹结构中有 Webapps/ROOT/ ,其中必须存在 WEB-INF 文件夹。如果将 WEB-INF 放在 Webapps/tomcat 中,则无法定位类文件和 jar。
只是添加另一种实现这个奇怪错误的方法
对我来说,发生的事情是 classpath
通过使用 TOMCAT_HOME
变量从 tomcat 获得了一些罐子。
在我目前的工作中工作的一年多时间里,我没有设置那个变量,也从来不需要它。但是这个特定的项目在 classpath
中需要这个变量,而 Eclipse 不会告诉我发生了 classpath
错误。
我遇到了同样的错误,我的 java 文件和包没有任何问题。后来我注意到文件夹名称WEB-INF是这样写的“WEB_INF”。因此,仅更正文件夹名称即可解决问题
从 Eclipse 运行时,我遇到了同样的问题。为了解决这个问题,我进入了配置构建路径并从构建路径中删除了 src 文件夹。然后关闭并重新打开项目。然后我将 src 文件夹添加到构建路径中。 src 文件夹包含我试图访问的 java 类。
我有同样的错误信息,我的处理方法如下:
首先检查 Tomcat 发布 Web 应用程序的文件目录,例如 D:\Java\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\myDatatable\WEB-INF\classes,在我们通常把我们的课。如果这不是您放置课程的地方,那么您必须通过右键单击您的 Web 应用程序根名称来找出默认情况下它在哪里-->构建路径-->配置构建浴...->然后检查“源”选项卡并找出“默认输出文件夹”的字段值。这将是 Tomcat 放置您的课程的地方。您会看到尚未构建 XYZ 类。为了构建它,您可以转到菜单“项目”-->“清理...”-->选择要清理的 Web 应用程序。完成后,尝试重新启动您的 tomcat 服务器并再次检查文件目录。你的班级应该在那里。至少它对我有用。希望能帮助到你。
不定期副业成功案例分享
package
是非法的包标识符;)