Ошибка 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 и снова проверьте каталог файлов. Твой класс должен быть там. По крайней мере, это работает для меня. Надеюсь, что это поможет.