пропущенные классы после публикации веб-проекта в Tomcat с помощью eclipse wtp - PullRequest
9 голосов
/ 02 декабря 2010

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

Эти приложения (динамические веб-проекты) развертываются на tomcat v6.0.6 с использованием eclipse WTP (Helios 3.6)

Когда я обновляю свое рабочее пространство и новые классы / ресурсы / банки извлекаются из репозитория SVN, я повторно публикую свои приложения в приложениях Tomcat и перезапускаю их.

Иногда, когда tomcat запускает одно из моих приложений, он вызывает исключение ClassNotFoundException или жалуется на другой отсутствующий ресурс. Иногда я вижу, что развернутый ресурс (например, Spring Beans XML) не устарел и содержит «старое» содержимое.

Обычная анти-вуду-черная магия процедура, которую я использую: * Стоп / Старт кота * очистить (когда щелкните правой кнопкой мыши на конфигурации сервера) * чистый рабочий каталог tomcat * удалить все приложения из tomcat, очистить, перезапустить tomcat, добавить все приложения

Мне нужно выполнить эту «процедуру» несколько раз, пока проблема не будет решена.

Вы, ребята, тоже страдаете от этого? Это известная ошибка? Любые предложения, как справиться с этим? Использование банок вместо утилитарных проектов решит / уменьшит эту проблему?

Вместо этого я хотел бы рассмотреть возможность использования Embedded Jetty, я просто хочу отказаться от проприетарных сценариев для запуска Jetty в «производственной» среде.

- Йонатан

Ответы [ 7 ]

3 голосов
/ 03 декабря 2010

Это случилось со мной много. Я бы не назвал это Вуду. Я думаю, что Eclipse WTP не работает, когда вы меняете вещи в фоновом режиме (например, сборка maven).

Что я делаю, чтобы решить эту проблему, чтобы вообще не использовать его. Вместо этого я использую плагин Maven WAR для развертывания приложения:

mvn war:inplace tomcat:inplace -DskipTests=true

Это работает очень быстро, так как не нужно собирать и упаковывать войну.

Затем, чтобы отменить развертывание приложения:

mvn tomcat:undeploy

У меня есть сценарии, которые

  • развернуть и запустить tomact
  • развернуть и остановить кота

Это выглядит примерно так:

Запустите 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

Развернуть и остановить кота:

#!/bin/sh

mvn tomcat:undeploy

<path-to-tomcat>/shutdown.sh -force

rm $CATALINA_PID

То же самое возможно с любым другим сценарием сборки - вопрос только в том, сколько кода вам придется написать.

Я выбрал войну Мейвена: цель на месте, потому что она делает очень мало, и поэтому бежит очень быстро. Смотрите здесь: maven.apache.org / plugins / maven-war-plugin / creation.html .

Кстати, у ANT и Gradle есть военное задание / плагин, который, вероятно, можно настроить для выполнения чего-то подобного (я не помню ...)

Надеюсь, это поможет.

1 голос
/ 21 февраля 2015

У меня была похожая проблема. Когда я публиковал веб-приложение, 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>
1 голос
/ 25 февраля 2014

Еще одна вещь, на которую стоит обратить внимание, это то, что Project -> Build Automatically должно быть включено, и у проекта не должно быть проблем с путями сборки.

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

Если файлы не создаются, они не будут опубликованы. Хотя это кажется очевидным, это легко упустить из виду и потратить впустую много времени.

1 голос
/ 06 января 2011

Работая с Eclipse с момента его появления, эти проблемы существовали всегда. Прибыл сюда, потому что мой web.xml больше не развертывается. Особенно в сочетании с m2eclipse вы никогда не узнаете, что происходит, когда вы пытаетесь запустить Tomcat. У всех, кого я знаю, как работал с Eclipse, есть эти проблемы, я не понимаю, почему они не исправляются ... и, к сожалению, работа в качестве подрядчика означает, что я не могу выбрать свою IDE, контейнер или способ публикации так что большую часть времени я застреваю с WTP.

1 голос
/ 02 декабря 2010

Интересное поведение .... Нечто подобное происходило на моей машине с Linux из-за проблем с разрешениями.

В любом случае, я предлагаю не использовать WTP.Вместо этого попробуйте скрипт ant build.Это просто и для меня это блестяще работает.

0 голосов
/ 08 января 2015

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

0 голосов
/ 28 марта 2012

Кажется, достигнут прогресс в решении этой проблемы.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=365748

Надеюсь, это будет исправлено в следующей версии Eclipse.

...