Eclipse и как он справляется со странным случаем JARS

Попытка внести небольшие изменения в движок Apache Velocity.

Вот что я могу и не могу делать.

Я вношу изменения в функцию слияния(). Изменение, которое я делаю, не имеет значения, потому что я еще не сделал его. ;) Прямо сейчас я соглашаюсь на срабатывание оператора println.

У меня есть две ссылки на merge(). Если я изменю функцию на mergeBAD(), Eclipse сообщит мне, что не может найти функцию merge(). Имеет смысл, верно? Раньше я включал в свой путь сборки класса два jar-файла, которые вы получаете при загрузке скорости, но вместо этого я создал проект, используя предоставленные файлы src, и использовал проект THAT в качестве зависимости. Опять же, тот факт, что он не может найти функцию merge(), когда я переименовываю ее в mergeBAD, дает мне надежду.

Но когда я запускаю свой веб-сервер, нажимаю точку останова и вхожу в вызов слияния, он не может найти источник! Я снова указываю ему на проект, и он «находит» источник, ни одно из сделанных мной изменений (в частности, операторы println) не срабатывает. Их просто пропускают. :(

Что, черт возьми, может быть причиной этого? Это сводит меня с ума. Я сегодня весь день пытался понять, что не так. Я не могу продолжать без возможности изменить Velocity. Из какой именно базы кода eclipse запускает файлы скорости?

Заранее большое спасибо ТАК! :)


person bobber205    schedule 07.10.2010    source источник


Ответы (1)


Это типичный случай путаницы между путем к классам сборки и путем к классам среды выполнения.

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

Управление путем к классам сборки и путем к классам среды выполнения в веб-проектах в Eclipse (проект WTP — веб-инструменты) претерпело значительные изменения за последние несколько выпусков WTP. Мы можем провести вас через. Если вы физически добавили JAR-файлы Velocity в свой WEB-INF/lib, давайте начнем с их удаления.


Хорошо, после того как вы удалите файл Velocity.jar из WEB-INF/lib, сделайте следующее:

  1. Щелкните проект правой кнопкой мыши, выберите «Свойства».
  2. Перейдите в «Путь сборки Java». Выберите вкладку «Проекты» и убедитесь, что вашего пользовательского проекта Velocity (давайте назовем его «MyVelocity») НЕТ там.
  3. По-прежнему в «Пути сборки Java» выберите вкладку «Библиотеки» и убедитесь, что JAR Velocity также отсутствует.

Следуя описанным выше шагам, мы очистили ваше веб-приложение от любой ссылки на MyVelocity (ваш проект) или любой другой JAR-файл Velocity.

Теперь самое интересное. Я научу вас, как правильно «добавлять» проекты Java в веб-проекты в качестве зависимостей.

  1. Еще в свойствах проекта перейдите к Deployment Assembly.
  2. Нажмите «Добавить».
  3. Выберите «Проект», а затем «Далее».
  4. Выберите «MyVelocity» и убедитесь, что установлен флажок «Справочник по веб-библиотеке».
  5. Нажмите «Готово».

Вернувшись в диалоговое окно Deployment Assembly, вы должны увидеть, что MyVelocity отображается в WEB-INF/lib/MyVelocity.jar.

Нажмите «ОК».

Что мы сделали, так это сопоставили MyVelocity как WEB-INF/lib зависимость. При этом MyVelocity также автоматически добавляется в путь сборки во время компиляции, поэтому очень важно, чтобы вы сами не добавляли его в путь сборки, что приведет к дублированию сборки. записи пути.

Теперь у вас все должно работать. Дайте мне знать, если у вас возникнут проблемы.

P.S. эти инструкции верны, если вы разрабатываете автономный проект WAR; если ваш WAR-файл является частью EAR, вы можете пожелать (при определенных обстоятельствах, например, если MyVelocity используется другими модулями J2EE внутри EAR) отобразить MyVelocity по-другому, в обычное место; если это так, дайте мне знать, и я подробнее остановлюсь.

person Isaac    schedule 07.10.2010
comment
Щелчок! :) Отправляюсь домой на весь день, но сделаю это первым делом завтра!! ^_^ - person bobber205; 08.10.2010
comment
Я удалил файл speed-1.5.jar, который был в моем WEB-INF/lib. - person bobber205; 09.10.2010
comment
Хорошо. Теперь убедитесь, что ваше веб-приложение не работает. Он должен завершиться с ошибкой NoClassDefFoundError. Как только вы это сделаете, настало время настроить ваш проект, чтобы включить ваш новый пользовательский проект Velocity Java в WEB-INF/lib. Я отредактирую свой первоначальный ответ с подробностями, как это сделать. - person Isaac; 09.10.2010
comment
Я не могу найти диалоговое окно в свойствах проекта для сборки развертывания. Означает ли это, что у меня нет отдельного проекта WAR? - person bobber205; 12.10.2010
comment
Я подозреваю, что вы используете устаревшую версию WTP. Убедитесь, что вы используете последнюю версию Eclipse — подойдет Helios (3.6). - person Isaac; 12.10.2010
comment
Я действительно использую новейшую версию Eclipse. :) - person bobber205; 13.10.2010
comment
В этом случае я подозреваю, что ваш проект не настроен как динамический веб-проект. Щелкните правой кнопкой мыши проект, перейдите к Project Facets; если ваш проект является (как и должно быть) динамическим веб-проектом, вы должны увидеть динамический веб-модуль в списке фасетов. Ты? - person Isaac; 13.10.2010