Класс не подключен, а приложение работает, почему?
От: MaxNevermind Россия  
Дата: 12.09.13 05:10
Оценка:
Скачал опен соурс проект(веб форум на джаве), пытаюсь разобраться как он устроен.
Обратил внимание, что выдает сообщение о том, что не может найти классы, вот например один из них:

import javax.servlet.http.HttpServletRequest;



И действительно servlet-api.jar не подключен, хотя в пом файле мэейвена указан в зависимостях. Сделал поиск HttpServletRequest.class — его нет нет в либ папке приложения в томкэте, и при этом приложение работает, от куда он может брать класс в данном случае?
Re: Класс не подключен, а приложение работает, почему?
От: avpavlov  
Дата: 12.09.13 05:25
Оценка: 1 (1)
MN>
MN>import javax.servlet.http.HttpServletRequest;
MN>



MN>И действительно servlet-api.jar не подключен, хотя в пом файле мэейвена указан в зависимостях.


Покажи пом, как там зависимость подключена? Если ты в ИДЕЕ, то после первого открытия проекта надо сделать "Reimport all maven projects", чтобы ИДЕЯ настроила свой внутренний проект согласно мавеновским настройкам

MN> Сделал поиск HttpServletRequest.class — его нет нет в либ папке приложения в томкэте,


Плохо искал.
Re: Класс не подключен, а приложение работает, почему?
От: Satabol Россия  
Дата: 12.09.13 05:27
Оценка: 1 (1)
Здравствуйте, MaxNevermind, Вы писали:

MN>откуда он может брать класс в данном случае?


Я пока не очень силён в jee, но обычно следствие такое — раз работает, значит где-то находит. Но у вас, кажется, два вопроса. Первый, почему не собирается? и второй, почему всё-таки работает? Самый простой первый — не собирается, потому что не находит эту зависимость. Но прикол в том, что решение может быть в ответе на второй вопрос — где разрешается зависимость при запуске? Я бы советовал смотреть файлы настроек сервера приложений, там бывают прописаны такие зависимости, которых нет в сборке, потому что сборка и запуск — два разных процесса.
Re: Класс не подключен, а приложение работает, почему?
От: MaxNevermind Россия  
Дата: 12.09.13 05:43
Оценка:
Вот пом файл:
http://www.codesend.com/view/26db081829894ac583e9f4d929a32011/
Это корневой, проект включает несколько модулей, у них отдельные пом файлы, но сервлет здесь указан.

По остальным вопросам:
-проект собирается и работает без проблем
-томкэт я как я по моему никак не настраивал
Re[2]: Класс не подключен, а приложение работает, почему?
От: MaxNevermind Россия  
Дата: 12.09.13 05:46
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Плохо искал.


искал так: HttpServletRequest.class во всем дереве вебапс томкэта в итоге нашел только в одном моем старом приложении на спринге
Re[2]: Класс не подключен, а приложение работает, почему?
От: Satabol Россия  
Дата: 12.09.13 06:32
Оценка:
Здравствуйте, MaxNevermind, Вы писали:

MN>-томкэт я как я по моему никак не настраивал


Да у него свои настройки по-умолчанию. Он же должен как-то работать после установки.
Re: Класс не подключен, а приложение работает, почему?
От: hrensgory Россия  
Дата: 12.09.13 06:49
Оценка: 1 (1)
12.09.2013 9:10, MaxNevermind пишет:

> Скачал опен соурс проект(веб форум на джаве), пытаюсь разобраться как он

> устроен.
> Обратил внимание, что выдает сообщение о том, что не может найти классы,
> вот например один из них:
>
> import javax.servlet.http.HttpServletRequest;

> Класс не подключен, а приложение работает, почему?


Потому что он (как и другие классы jee api и не только) есть в либах
самого томкэта (не приложения). В мавене для такого указывается
scope=provided

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Класс не подключен, а приложение работает, почему?
От: MaxNevermind Россия  
Дата: 12.09.13 07:08
Оценка:
Здравствуйте, hrensgory, Вы писали:

H>12.09.2013 9:10, MaxNevermind пишет:


>> Скачал опен соурс проект(веб форум на джаве), пытаюсь разобраться как он

>> устроен.
>> Обратил внимание, что выдает сообщение о том, что не может найти классы,
>> вот например один из них:
>>
>> import javax.servlet.http.HttpServletRequest;

>> Класс не подключен, а приложение работает, почему?


H>Потому что он (как и другие классы jee api и не только) есть в либах

H>самого томкэта (не приложения). В мавене для такого указывается
H>scope=provided

H>--

H>WBR,
H>Serge.

Да, действительно, не знаю как сразу сам не заметил в папке либ томкэта лежит сервлет апи
Re[2]: Класс не подключен, а приложение работает, почему?
От: avpavlov  
Дата: 12.09.13 07:22
Оценка:
MN>http://www.codesend.com/view/26db081829894ac583e9f4d929a32011/
MN>Это корневой, проект включает несколько модулей, у них отдельные пом файлы, но сервлет здесь указан.

Он указан в секции dependencyManagement, это просто как реестр зависимостей в проекте.

Чтобы в конкретном модуле был доступен servlet api, в этом модуле надо явно указать в секции dependencies

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <scope>provided</scope>
</dependency>


Причем в данном случае уже без версии, потому что версию он возьмёт из реестра зависимостей

MN>-проект собирается и работает без проблем


Если собирается, то в чём проблема? Не компилируется ИДЕ? Какая у тебя ИДЕ? Если Эклипс, выкини его на помойку, у него безобразная поддержка Мавена. Используй IDEA.
Re[3]: Класс не подключен, а приложение работает, почему?
От: MaxNevermind Россия  
Дата: 12.09.13 07:45
Оценка:
Здравствуйте, avpavlov, Вы писали:

MN>>http://www.codesend.com/view/26db081829894ac583e9f4d929a32011/

MN>>Это корневой, проект включает несколько модулей, у них отдельные пом файлы, но сервлет здесь указан.

A>Он указан в секции dependencyManagement, это просто как реестр зависимостей в проекте.


A>Чтобы в конкретном модуле был доступен servlet api, в этом модуле надо явно указать в секции dependencies


A>
A><dependency>
A>        <groupId>javax.servlet</groupId>
A>        <artifactId>servlet-api</artifactId>
A>        <scope>provided</scope>
A></dependency>
A>


A>Причем в данном случае уже без версии, потому что версию он возьмёт из реестра зависимостей


Так и есть, в пом файлах отдельных модулей.

MN>>-проект собирается и работает без проблем


A>Если собирается, то в чём проблема? Не компилируется ИДЕ? Какая у тебя ИДЕ? Если Эклипс, выкини его на помойку, у него безобразная поддержка Мавена. Используй IDEA.


Есть не проблема, есть задача — разобраться в том как работает проект, от и до, включая мэйвен.

С данным вопросом уже разобрался, всем спасибо!
Re[3]: Класс не подключен, а приложение работает, почему?
От: MaxNevermind Россия  
Дата: 12.09.13 11:06
Оценка:
Здравствуйте, avpavlov, Вы писали:

A> Какая у тебя ИДЕ? Если Эклипс, выкини его на помойку, у него безобразная поддержка Мавена. Используй IDEA.


Под плохой поддержкой вы понимаете то, что там нужно в run configuration залазить и нельзя сразу команду вбить? А как в Идее?
Re[4]: Класс не подключен, а приложение работает, почему?
От: avpavlov  
Дата: 12.09.13 14:05
Оценка:
Здравствуйте, MaxNevermind, Вы писали:

MN>Здравствуйте, avpavlov, Вы писали:


A>> Какая у тебя ИДЕ? Если Эклипс, выкини его на помойку, у него безобразная поддержка Мавена. Используй IDEA.


MN>Под плохой поддержкой вы понимаете то, что там нужно в run configuration залазить и нельзя сразу команду вбить? А как в Идее?


Под плохой поддержкой я понимаю то, что в 2013 году команда Эклипса продолжает делать вид, что Мавен — это всего лишь одна из доп. технологий, тогда как на самом деле, Мавен одна из ключевых технологий в текущей экосистеме Явы.
Re[3]: Класс не подключен, а приложение работает, почему?
От: Baudolino  
Дата: 13.09.13 11:55
Оценка:
A>Если Эклипс, выкини его на помойку, у него безобразная поддержка Мавена.
Нормальная там поддержка, не надо сказок рассказывать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.