it-swarm.com.ru

Ошибка 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
67
Ankur

ОК, я просто решил это. В последнем импорте я добавил ";" копируя другие примеры кода. Я предполагаю, что это стандартное окончание строки, которое требуется.

Так

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

Что ж, вы на самом деле не предоставляете достаточно информации о своем веб-приложении, но я предполагаю, что у вас есть JSP с чем-то вроде этого:

<%@ page import="Java.util.*,x.y.Z"%> 

И x.y.Z не может быть найден на пути к классам (то есть отсутствует в WEB-INF/classes, а также в JAR WEB-INF/lib).

Дважды проверьте, что развернутая на 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

Или что JAR, который связывает x.y.Z.class, присутствует в WEB-INF/lib.

60
Pascal Thivent

Если вы произнесете неправильное имя класса или класс не указан в пути к классам, процессор JSP скажет, что он «разрешается в пакет», а не в том, что он не существует. Это сводило меня с ума сегодня, так как я не видел опечатку, которую я сделал.

7
gmcgath

Без дополнительных подробностей это звучит как ошибка в объявлении импорта класса. Проверьте, все ли объявления импорта импортируют все классы из пакета или одного класса:

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

Правка

ОК, после редактирования, похоже, что это проблема jsp. 

Правка 2

Вот еще одна запись на форуме , проблема, похоже, имеет сходство, и жертва решила ее, переустановив Eclipse. Я бы попробовал это сначала - установить второй экземпляр Eclipse только с самыми необходимыми плагинами, новым рабочим пространством, проектом, импортированным в это чистое рабочее пространство, и надеяться на лучшее ...

3
Andreas_D

Я получил эту ошибку в Netbeans. Как и в случае с большинством странных ошибок, подобных этой, которые появляются из ниоткуда, я решаю их, перейдя в свойства проекта, изменив исходный/двоичный формат (неважно, что, просто что-то другое), и выполнив очистку и сборку. 

2
Gullbyrd

Я решил проблему, добавив файлы jar в каталог Tomcat lib.

2
Pratik Gaurav

Я тоже столкнулся с этой странной ошибкой после изменения регистра букв в имени класса. Файл не был скопирован на сервер Tomcat, как ожидалось, мне пришлось удалить его вручную и повторно развернуть. Может быть, потому что я использую регистронезависимую операционную систему?

1
jediz

Для меня это было неправильное развертывание. Развернуто правильно, все работает (проверьте мой вопрос подробности).

1
parsecer

Я знаю, что уже слишком поздно, чтобы ответить на этот пост, но так как я не вижу четкого ответа, я все равно это сделаю ...

вы можете проверить MANIFEST.MF в META-INF на своем Eclipse.

тогда вам может понадобиться добавить путь к файлам вашего класса, например ..

Class-Path: WEB-INF/classes

1
optimystery

сгенерируйте отдельный файл .class и вставьте его в соответствующий пакет в рабочую область . Обновить проект.

1
Karan Rajput

У меня была такая же проблема, и я просто хотел дать свое решение. Может быть, кто-то сталкивается с той же проблемой.

Я правильно настроил свой артефакт, но каким-то образом перепутал что-то и удалил папку WEB-INF в одном из моих артефактов.

Когда я просматривал содержимое моего .war-файла, каждый класс присутствовал в правильной структуре папок. Поэтому я не думал, что чего-то не хватает. Но когда я проверил артефакты в Intellij и сравнил их с рабочим артефактом, я понял, что в папке WEB-INF с классами и библиотеками нет.

Добавьте их к артефакту, и он должен работать.

TLDR: Intellij удалил папку WEB-INF из моего артефакта .war. Просто проверьте, не пропал ли ваш. (Проект Strucutre -> Артефакты)

0
Zybrion

Мой вклад: я получил эту ошибку, потому что я создал пакет с именем 3lp . Однако, согласно спецификации Java, вы не можете называть ваш пакет, начинающийся с цифры . Я изменил его на _3lp, теперь он работает ,.

0
Cocu_1012

Если вы используете Maven и упаковываете свои классы Java как JAR, убедитесь, что JAR обновлен. Все еще предполагая, что JAR находится в вашем классе, конечно.

0
H.Rabiee

У меня была похожая проблема. В 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>
0
Tharaka Manawardhana

Я держу пари, что у вас есть пакет с именем org.ivec.eresearch.knowledgeportal.model. category (small c) и вы работаете в файловой системе, не чувствительной к регистру, например Windows или Mac. Кажется, что компилятор запутывается, когда класс и пакет существуют.

Вы можете переименовать класс «Категория» или пакет «Категория», и эта ошибка исчезнет. К сожалению, я не уверен, что это ошибка Tomcat или ECJ.

0
Nic Cottrell

Обычно это происходит при смешивании (на той же странице jsp) статического импорта jsp:

<%@include file="...

с динамическим импортом jsp:

<jsp:include page="...

и ваш тип уже был импортирован "статическим импортированным" jsp. Когда тот же тип должен использоваться (и затем импортироваться) «динамически импортируемым» jsp ->, это создает исключение: «Только тип может быть импортирован ...»

0
Alessandro Marini

Я решил это, добавив файл jar, содержащий импортированные классы, в WEB-INF/Lib

0
Abdellah Benrebea

Вы должны импортировать что-то из пакета, например, класс, перечисление или интерфейс, например:

import some.package.SomeClass;

или импортировать все из пакета (не рекомендуется)

import some.package.*;

Правка: возможно, я не читал достаточно близко. Где находится пакет, который вы пытаетесь импортировать, находится в файловой системе? Это под WEB-INF/lib?

0
jrdngrnbrg

Есть еще детали? (Это в JSP как на связанной веб-странице?)

Если это так, вы всегда можете просто использовать полное имя класса.
скорее, чем: 

import foo.bar.*;
Baz myBaz;

ты можешь использовать

foo.bar.Baz myBaz;
0
William Billingsley

Есть и это исключение.

Среда: Mac с Eclipse, на котором запущен Tomcat из Eclipse с использованием представления Servers. 

По любой причине Eclipse не копирует папку classes в WEB-INF. После того, как папка classes была скопирована вручную, все работает нормально. 

Не знаю, или это ошибка Eclipse, или я что-то пропустил. 

0
yurin

Вы пытаетесь импортировать переопределенный класс, как я?

Если это так, ваш переопределенный класс находится в неправильном пакете или просто не существует.

Создание или перемещение класса в правильное местоположение (src/[package.package]. [Class]) может решить вашу проблему.

0
Graham P Heath