Ошибка Java: импортируется только тип. XYZ разрешает пакет
Я получаю сообщение об ошибке: "Можно импортировать только тип. XYZ разрешает пакет."
Кто-то объяснил причину здесь, но я не уверен, что я должен был сделать, чтобы исправить это. FYI: Я использую 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
Ответы
Ответ 1
ОК, я просто решил. В последнем импорте я добавил ";" путем копирования других примеров кода. Я предполагаю, что требуется стандартная строка.
Итак,
<%@ 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
Ну, вы на самом деле не предоставляете достаточно подробностей в своем веб-приложении, но я предполагаю, что у вас есть JSP с чем-то вроде этого:
<%@ page import="java.util.*,x.y.Z"%>
И x.y.Z
не может быть найден на пути к классу (т.е. отсутствует в WEB-INF/classes
или в JAR WEB-INF/lib
).
Дважды проверьте, что WAR, который вы развертываете на Tomcat, имеет следующую структуру:
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
Или что JAR, который связывает x.y.Z.class
, присутствует в WEB-INF/lib
.
Ответ 3
Если вы неправильно произносите имя класса или класс не находится в пути к классам, процессор JSP скажет, что он "разрешает пакет", а не тот, которого он не существует. Сегодня это сводило меня с ума, так как я не видел опечатки, которую я сделал.
Ответ 4
Без дополнительной информации это звучит как ошибка в объявлении импорта класса. Убедитесь, что если все объявления импорта импортируют все классы из пакета или одного класса:
import all.classes.from.package.*;
import only.one.type.named.MyClass;
Edit
OK, после редактирования, выглядит как проблема jsp.
Изменить 2
Вот еще одна статья в форуме, проблема, похоже, имеет сходство, и жертва решила ее, переустановив eclipse. Я бы попробовал это сначала - установка второго экземпляра eclipse с использованием только самых необходимых плагинов, новой рабочей области, проекта, импортированного в это чистую рабочую область, и надеюсь на лучшее...
Ответ 5
Я получил эту ошибку в Netbeans. Как и в случае с такими необычными ошибками, которые возникают из ниоткуда, я разрешаю это, перейдя к свойствам проекта, изменяя исходный/двоичный формат (не имеет значения, что-то другое), и делает чистую и сборку.
Ответ 6
Я разрешил это, добавив банки в каталог tomcat lib.
Ответ 7
Я знаю, что слишком поздно ответить на этот пост, но так как я не вижу ясного ответа, я все равно сделаю это...
вы можете проверить MANIFEST.MF
в META-INF
на своем затмении.
вам может потребоваться добавить путь к вашим файлам классов, например..
Class-Path: WEB-INF/classes
Ответ 8
Я тоже испытал эту странную ошибку, изменив регистр букв имени класса. Файл не был скопирован на сервер tomcat, как и ожидалось, мне пришлось удалить его вручную и переустановить. Может быть, потому, что я использую нечувствительную к регистру операционную систему?
Ответ 9
сгенерировать файл .class отдельно и вставить его в соответствующий пакет в рабочую область.
Обновить проект.
Ответ 10
Для меня это было неправильное развертывание. Развернувшись правильно, все работает (проверьте мой вопрос).
Ответ 11
Вам нужно импортировать что-то из пакета, например класс, перечисление или интерфейс, например:
import some.package.SomeClass;
или, импортируйте все из пакета (не рекомендуется)
import some.package.*;
Изменить: возможно, я не читал достаточно близко. Где пакет, который вы пытаетесь импортировать из находящегося в файловой системе? Под WEB-INF/lib?
Ответ 12
Есть ли более подробные сведения? (Это в JSP, как на связанной веб-странице?)
Если это так, вы всегда можете просто использовать полное имя класса.
а не:
import foo.bar.*;
Baz myBaz;
вы можете использовать
foo.bar.Baz myBaz;
Ответ 13
У меня была аналогичная проблема. В eclipse я сравнил свой проект с примером проекта, который отлично работает (сгенерирован архетипом maven). Я обнаружил, что мой проект пропустил 2 строки в файле /.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>
Ответ 14
Мой вклад: я получил эту ошибку, потому что я создал пакет с именем 3lp.
Однако, согласно спецификации java, вам запрещено указывать, что ваш пакет начинается с числа.
Я изменил его на _3lp, теперь он работает.
Ответ 15
Моя ставка заключается в том, что у вас есть пакет с именем org.ivec.eresearch.knowledgeportal.model. категория (малый c
) и работает в нечувствительной к делу файловой системе, такой как Windows или Mac, Кажется, что компилятор запутался, когда существуют класс и пакет.
Вы можете либо переименовать класс "Категория", либо "Категория" пакета, и эта ошибка исчезнет. К сожалению, я не уверен, что это ошибка Tomcat или ECJ.
Ответ 16
Если вы используете Maven и упаковываете свои Java-классы в JAR, убедитесь, что JAR обновлен. Тем не менее, предполагается, что JAR, конечно, находится в вашем классе.
Ответ 17
Я разрешил его, добавив файл jar, содержащий импортированные классы, в WEB-INF/Lib
.
Ответ 18
Вы пытаетесь импортировать переопределенный класс, как я?
Если это так, ваш переопределенный класс находится в неправильном пакете или просто не существует.
Создание или перемещение класса в нужное место (src/[package.package]. [class]) может решить вашу проблему.
Ответ 19
Обычно это происходит при перемещении (на той же странице jsp) статического импорта jsp:
<%@include file="...
с динамическим jsp import:
<jsp:include page="...
и ваш тип уже импортирован с помощью "статического импортированного" jsp. Когда один и тот же тип необходимо использовать (а затем импортировать) с помощью "динамически импортированного" jsp → , это генерирует исключение: "Только тип может быть импортирован..."
Ответ 20
У меня была такая же проблема, и я просто хотел дать свое решение. Может быть, кто-то сталкивается с той же проблемой.
Я правильно настроил свой артефакт, но как-то перепутал что-то и удалил папку WEB-INF в одном из моих артефактов.
Когда я просматривал содержимое моего .war файла, каждый класс присутствовал в правильной структуре папок. Поэтому я не думал, что чего-то не хватает. Но когда я проверил артефакты в Intellij и сравнил их с рабочим артефактом, я понял, что в папке WEB-INF с классами и библиотеками нет.
Добавьте их к артефакту, и он должен работать.
TL;DR: Intellij удалил папку WEB-INF из моего артефакта .war. Просто проверьте, не пропал ли ваш. (Проект Strucutre → Артефакты)
Ответ 21
Есть и это исключение.
Среда: Mac с Eclipse, на котором запущен Tomcat из Eclipse с использованием представления "Серверы".
По любой причине Eclipse не копирует папку classes
в WEB-INF
. После того, как папка classes
была скопирована вручную, все работает нормально.
Не знаю, или это ошибка Eclipse, или я что-то пропустил.
Ответ 22
У меня было такое же сообщение об ошибке, и мой способ справиться с этим:
- Сначала перейдите в каталог файлов, где ваш Tomcat публикует ваше веб-приложение, например. D:\Java\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\myDatatable\WEB-INF\классы, в которые мы обычно помещаем наши классы. Если это не то место, где вы помещаете свои классы, тогда вам нужно выяснить, по умолчанию, это просто щелкнуть имя вашего веб-приложения → Путь сборки → Настроить сборку... → Затем проверьте вкладку "Источник" и узнать значение поля "Папка вывода по умолчанию". Это место, где Tomcat ставит ваши классы.
- Вы увидите, что класс XYZ еще не построен. Чтобы создать его, вы можете перейти в меню "Проект" → "Очистить..." → Выберите свое веб-приложение для очистки.
- По завершении перезапустите ваш сервер tomcat и снова проверьте каталог файлов. Твой класс должен быть там. По крайней мере, это работает для меня. Надеюсь, что это поможет.