Ответ 1
Проверьте Развертывание сборки (контекстное меню в проекте), должно быть сопоставление Maven Dependencies → WEB-INF/lib.
Я пытаюсь создать базовый мирный проект, используя Eclipse Indigo и сервер Tomcat. Я создал динамический проект с простым сервлетом. Протестировал сервлет, и это сработало нормально. Затем я включил поддержку Maven и добавил logback к моему pom. Я помещаю оператор регистрации в метод сервлета doGet
. При запуске сервлета он жалуется, что не может найти никаких привязок, потому что банки журнала не копируются в экземпляр экземпляра Eclipse tomcat. Я ожидал найти банки, опубликованные где-то здесь:
${workspace}\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\
Как заставить Eclipse работать с WTP/Maven правильно? Я также попытался установить разъем m2e-wtp без разницы.
Проверьте Развертывание сборки (контекстное меню в проекте), должно быть сопоставление Maven Dependencies → WEB-INF/lib.
Исходя из фона ASP.NET, я нахожу это шокирующим, сколько работы требуется, чтобы Webapp работал с Eclipse WTP и Maven, особенно если вы учитесь самостоятельно. Надеемся, что это краткое руководство поможет кому-то быстро подняться на скорость.
Существует два способа получить приветственный мировой проект, работающий в Eclipse WTP с Maven. Вы можете создать динамический веб-проект, а затем добавить природу Maven, или вы можете сделать обратное.
Предварительные требования для Eclipse с сайтами обновлений
"Веб, XML, Java EE и OSGi Enterprise Development"
http://download.eclipse.org/releases/indigo
"Интеграция Maven для Eclipse"
http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/
"Интеграция Maven для WTP"
http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/
Конфигурация запуска
Установите копию Tomcat 7 из http://tomcat.apache.org/download-70.cgi
Окно → Настройки → Сервер → среда выполнения
Вариант 1. Создайте динамический веб-проект, затем добавьте Maven Nature
Создайте новый проект Maven, выберите архетип org.apache.maven.archetypes: Maven-архетип-WebApp
Переход на перспективу Java EE.
Создайте новую исходную папку src\main\java. Обратите внимание, что Eclipse недостаточно умен, чтобы сделать это для вас, а также порядок расположения папок неверен. Папка src\main\java указана после src\main\resources. Это может быть исправлено вручную позже в свойствах проекта.
Создайте новый сервлет. Обратите внимание, как Eclipse по умолчанию использует этот файл в неправильной папке src\main\resources, потому что порядок неправильный. Вместо этого вручную выберите src\main\java. Измените сопоставление URL-адресов на второй странице мастера на /*, чтобы упростить тестирование.
Теперь наш сервлет готов, но зависимости от сервлета api не связаны. A) мы можем добавить сервлет api как зависимость от нашего проекта или B) мы можем привязать к конфигурации сервера Eclipse для Apache 7.0.
Для опции A добавьте эту зависимость в pom:
.
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>7.0.${set this}</version>
<scope>provided</scope>
</dependency>
Для опции B:
Внутри браузера должна появиться пустая страница, например http://localhost:8080/ ${artifact}
Проверка публикации зависимостей:
Добавьте joda-время к pom.
Добавьте эту строку в сервлет, созданный ранее для метода doGet, и импортируйте необходимые зависимости:
.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("The time is now: " + new DateTime().toString());
}
Загрузите тестовую страницу, и теперь результат должен быть:
Время сейчас: 2012-03-03T14: 14: 29.890-05: 00
Теперь, если вы хотите играть с Servlet 3.0 и аннотации, это по умолчанию не включено, по какой причине я не знаю. Сначала заставьте Maven использовать Java 1.6, добавив это вашему pom, иначе каждый раз, когда вы обновляете свой pom, конфигурация вернется к Java 1.5.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
Открыть свойства проекта → Границы проекта. Измените версию в разделе "Динамический веб-модуль" на 3.0, измените версию Java версии 1.6
Создайте новый сервлет с именем класса AnnotatedServlet в src\main\java и обратите внимание, как автоматически создается аннотация @WebServlet.
Вариант 2. Создайте динамический веб-проект, затем добавьте Maven Nature
response.getWriter().println("Another test");
Дважды щелкните "Дескриптор развертывания" и добавьте этот атрибут в корневой элемент веб-приложения metadata-complete="false"
Щелкните правой кнопкой мыши проект и выберите "Запустить как" → "Выполнить на сервере"
.
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
Щелкните правой кнопкой мыши веб-проект в Project Explorer и выберите Maven → Update Project
У меня возникла аналогичная проблема, и, хотя я правильно настроил сборку развертывания, она все еще не работала. Затем я обнаружил, что под окном → Настройки → Мой Eclipse → Проект Java Enterprise → Веб-проект на вкладке "Развертывание" управление проектами Dependent было отключено. Я изменил его, чтобы развернуть банки зависимых проектов в папку lib, а затем все работало как шарм. Я мог бы даже отключить вариант сборки развертывания.