2009-12-07 2 views
62

Я получаю сообщение об ошибке: «Только тип может быть импортирован. XYZ разрешает пакет».Ошибка Java: импортируется только тип. XYZ разрешает пакет

Кто-то объяснил причину here, но я не уверен, что я должен был сделать, чтобы исправить это. 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(); 

// 
%> 

Edit: фактическая ошибка ниже:

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 
+0

Это поможет, если вы сможете опубликовать код и предоставить более подробную информацию о своей среде. –

+0

Ну, большая часть кода - это просто HTML. Поскольку в этот момент он падает, я не сильно продвинулся. Я использую Tomcat 6, но я запускаю приложение через функцию отладки Eclipse. Дайте мне знать, если я буду предлагать другие. – Ankur

+2

Сценарии - плохая практика: http://stackoverflow.com/questions/1831238/jsp-for-business-layer/1832327#1832327 Используйте сервлет. – BalusC

ответ

31

OK Я просто решил. В последнем импорте я добавил «;» путем копирования других примеров кода. Я предполагаю, что это стандартное окончание строки, которое требуется.

Так

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

Ничего себе! Спасибо Спасибо спасибо! – sixtyfootersdude

+9

Полу-двоеточие вызывает только синтаксическую ошибку. – Gullbyrd

+0

Благословит вас Бог! 1 весь интернет для этого человека пожалуйста !! – UrielUVD

0

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

import some.package.SomeClass; 

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

import some.package.*; 

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

0

Есть ли более подробная информация? (Является ли это в JSP как на связанной веб-странице?)

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

import foo.bar.*; 
Baz myBaz; 

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

foo.bar.Baz myBaz; 
3

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

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

Редактировать

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

Edit 2

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

58

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

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

И x.y.Z не может быть найден на пути к классам (т.е. нет под WEB-INF/classes, ни в баночке 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.

+17

+1 Вы на самом деле потратили время на создание этого дерева ASCII ?! –

+2

Я использовал команду 'tree', но мне пришлось немного его настроить :) –

+1

Спасибо. Все выглядит так, как вы говорите, что это должно быть, поэтому это так запутанно. – Ankur

1

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

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

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

Class-Path: WEB-INF/classes

+0

Определенно нет. Это значение по умолчанию. – EJP

1

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

+0

Бинго. В моем случае класс проблемы был в другом проекте, который не был скопирован Netbeans в Tomcat lib при изменении, как я и ожидал. – megaflop

0

У меня была аналогичная проблема. В 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

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

2

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

+0

Спасибо! Ничего себе, не могу поверить, что сработало. Я попробую это в следующий раз, когда у меня возникнет странная ошибка Netbeans. Я не знаю, почему Netbeans плохо себя ведет. Это случается чаще, когда я установил новую версию. – mikato

0

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

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

0

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

0

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

0

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

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

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

7

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

+0

Я видел эту проблему после ручного копирования файлов классов в директорию Tomcat webapps/myApp/WEB-INF/classes. Отскок Tomcat зафиксировал это. И я бы предположил, что перераспределение будет работать. – user2529737

+0

Действительно, сообщение ужасно. Даже если они не хотят разбираться в двух случаях, он должен, по крайней мере, быть «класс не найден или не разрешен к пакету». –

1

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

0

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

-1

У меня было то же самое сообщение об ошибке, и мой способ борьбы с ним заключается в следующем:

  1. Сначала проверю каталог файлов, где ваш Tomcat является публикация вашего веб-приложения, например D: \ Java \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp1 \ wtpwebapps \ myDatatable \ WEB-INF \ классы, в которые мы обычно помещаем наши классы. Если это не то место, где вы помещаете свои классы, тогда вам нужно выяснить, по умолчанию, это просто щелкнуть имя вашего веб-приложения -> Путь сборки -> Настроить сборку ... -> Затем проверьте вкладку «Источник» и узнать значение поля «Папка вывода по умолчанию». Это место, где Tomcat ставит ваши классы.
  2. Вы увидите, что класс XYZ еще не построен. Чтобы создать его, вы можете перейти в меню «Проект» -> «Очистить ...» -> Выберите свое веб-приложение для очистки.
  3. После того, как все будет готово, попробуйте перезагрузить сервер tomcat и снова проверьте каталог файлов. Твой класс должен быть там. По крайней мере, это работает для меня. Надеюсь, поможет.
0

Это обычно происходит при смешивании (в одной и той же JSP странице) статический импорт Jsp:

<%@include file="... 

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

<jsp:include page="... 

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

1

Я получил его, добавив банки в каталоге tomcat lib.

Смежные вопросы