отсутствующие классы после публикации веб-проекта в tomcat с помощью eclipse wtp
У меня есть несколько динамических веб-проектов в моей рабочей области, каждый из которых содержит классы и ссылается на другие служебные проекты (простые проекты Java) и сторонние банки.
эти приложения (динамические веб-проекты) развертываются на tomcat v6.0.6 Использование eclipse WTP (Helios 3.6)
когда я обновляю свою рабочую область и новые классы/ресурсы/банки извлекаются из репозитория SVN, я повторно публикую свои приложения в приложениях tomcat и перезапускаю его.
иногда, когда tomcat запускает одно из моих приложений, бросает ClassNotFoundException или жалуется на другой отсутствующий ресурс. Иногда я вижу, что развернутый ресурс (например, xml spring beans) не обновлен и имеет в нем "старое" содержимое.
общие анти-вуду-черная магия лечения я использую: * остановить / запустить tomcat * очистить (при щелчке правой кнопкой мыши по конфигурации сервера) * очистить рабочий каталог tomcat * удалите все приложения из tomcat, очистите, перезапустите tomcat, добавьте все приложения
Мне нужно запустить эту процедуру несколько раз, пока не решена проблема.
вы, ребята, тоже страдаете от этого ? Это известная ошибка ? Есть предложения, как с этим справиться ? использование jars вместо коммунальных проектов решит / уменьшит эти проблемы?
Я бы рассмотрел использование встроенного причала вместо этого, я просто хочу избежать проприетарных сценариев для запуска причала в "производственной" среде.
-- Йонатан
7 ответов
Это случилось со мной много. Я бы не назвал это "Вуду". Я думаю, что Eclipse WTP не работает хорошо, когда вы меняете материал в фоновом режиме (например, сборку maven).
что я делаю, чтобы решить эту проблему, чтобы избежать ее использования вообще. Вместо этого я использую плагин Maven WAR для развертывания приложения:
mvn war:inplace tomcat:inplace -DskipTests=true
это работает очень быстро, так как ему не нужно собирать и упаковывать войну.
затем, чтобы отменить развертывание приложения:
mvn tomcat:undeploy
у меня есть скрипты это
- развернуть и запустить tomact
- отменить развертывание и остановить tomcat
это выглядит примерно так:
запустите tomcat и разверните приложение:
#!/bin/sh
if [ -f $CATALINA_PID ]; then
echo "tomcat already running with pid " `cat $CATALINA_PID`
exit 1
fi
java -Dmy.arg=val -Dcatalina.home=<catalina-home> -Dlog4j.configuration=file:///log4j.xml -classpath <path-to-tomcat-lib>/bootstrap.jar:/usr/lib/jvm/java-6-sun-1.6.0.20/lib/tools.jar org.apache.catalina.startup.Bootstrap start &
echo $! > $CATALINA_PID
mvn war:inplace tomcat:inplace -DskipTests=true
отменить развертывание и остановить tomcat:
#!/bin/sh
mvn tomcat:undeploy
<path-to-tomcat>/shutdown.sh -force
rm $CATALINA_PID
то же самое, вероятно, с любым другим скриптом сборки - это просто вопрос того, сколько кода вам нужно будет написать.
Я выбрал maven's war: inplace цель, так как она делает очень мало, и, таким образом, работает очень быстро. Смотрите здесь: maven.apache.org/plugins/maven-war-plugin/usage.html.
BTW, ANT и Gradle имеют военную задачу / плагин, который, вероятно, можно настроить, чтобы сделать что-то подобное (я действительно не помню...)
надеюсь, что это помогает.
интересное поведение.... Что-то подобное происходило на моей машине Linux из-за проблем с разрешениями.
в любом случае, я предлагаю не использовать WTP. Вместо этого попробуйте Ant build script. Это просто, и для меня это работает блестяще.
работал с Eclipse с тех пор, как он вышел, эти проблемы всегда существовали. Приехал сюда, потому что atm моя паутина.xml больше не развертывается. Особенно в сочетании с m2eclipse вы никогда не узнаете, что происходит, когда вы пытаетесь запустить Tomcat. Все, кого я знаю, как работал с Eclipse, имеют эти проблемы, я не понимаю, почему они не исправляются...и, к сожалению, работа в качестве подрядчика означает, что я не могу выбрать свою IDE или контейнер или способ публикации, поэтому большую часть времени я застрял с ГУР.
еще одна вещь, на которую нужно обратить внимание, это Project -> Build Automatically
должно быть включено, и проект не должен иметь проблем с построением пути.
откройте представление навигатора и убедитесь, что папка сборки создана class
файлы.
если файлы не создаются, они не будут опубликованы. Хотя это кажется очевидным, легко смотреть и тратить много времени.
У меня была похожая проблема. Когда я опубликовал веб-приложение, Eclipse не включал один из jar и, следовательно, публиковать для разъединения через Eclipse не удается. Я исправил это, изменив .файл classpath проекта для исправления зависимости, как показано ниже. Чтобы убедиться, что он синхронизирован с другой конфигурацией jars.
<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17.jar" sourcepath="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17-sources.jar">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
кажется, прогресс в решении этой проблемы.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=365748
надеюсь, он будет исправлен для следующего выпуска Eclipse.
одним из возможных решений может быть то, что ваша папка bin не создается. убедитесь, что вы не удалили папку build/bin и она существует в вашем рабочем пространстве.