отсутствующие классы после публикации веб-проекта в 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 и она существует в вашем рабочем пространстве.