Я использую eclipse:eclipse
цель генерировать среду Проекта Eclipse. Развертывание хорошо работает. Цель создает записи пути к классу var для всех необходимых зависимостей.
С m2eclipse
был Контейнер Знатока, который определяет папку экспорта, которая была WEB-INF/lib
для меня. Но я не хочу полагаться m2eclipse
таким образом, я больше не использую его.
записи пути к классу, которые сгенерированы eclipse:eclipse
цель не имеет такой папки экспорта.
При начальной загрузке контейнера сервлета с WTP это публикует все ресурсы и классы кроме библиотек к контексту.
То, что отсутствует для публикации необходимого, освобождает, или разве который не возможен без m2eclipse интеграции?
Enviroment
Сменная затмением знатоком конфигурация
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
<projectNameTemplate>someproject-[artifactId]</projectNameTemplate>
<useProjectReferences>false</useProjectReferences>
<downloadSources>false</downloadSources>
<downloadJavadocs>false</downloadJavadocs>
<wtpmanifest>true</wtpmanifest>
<wtpversion>2.0</wtpversion>
<wtpapplicationxml>true</wtpapplicationxml>
<wtpContextName>someproject-[artifactId]</wtpContextName>
<additionalProjectFacets>
<jst.web>2.3</jst.web>
</additionalProjectFacets>
</configuration>
</plugin>
Сгенерированные файлы
После выполнения eclipse:eclipse
цель, зависимый модуль не перечислен в моем сгенерированном .settings/org.eclipse.wst.common.component
, таким образом на начальной загрузке сервера я пропускаю depdencies.
Это - то, что я получаю:
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="someproject-core">
<wb-resource deploy-path="/" source-path="src/main/java"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<wb-resource deploy-path="/" source-path="src/main/resources"/>
</wb-module>
</project-modules>
Обновление для предстоящих читателей
Проблемой здесь был инакомыслящий packaging
- введите, если Вы используете maven-eclipse-plugin
проверьте использование <packaging>war</packaging>
или ear
.
Следующие проблемы отмечены ситуаций, что у меня есть два жизненных цикла сборки в одном англичанине знатока.
Чего не хватает для публикации необходимых библиотек, или это невозможно без интеграции m2eclipse?
Я не уверен, что понимаю проблему. Я долгое время успешно использовал maven-eclipse-plugin
с веб-приложениями maven. Итак, развертывание на сервере работает или нет? Приложение можно использовать или нет? Не могли бы вы прояснить?
На всякий случай я провел быстрый тест недавно созданного веб-приложения с конфигурацией вашего плагина, которая выглядит нормально. Я только что удалил jst.java
и настроил вместо него maven-compiler-plugin
:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>1.5</target>
<source>1.5</source>
</configuration>
</plugin>
И я добавил зависимость от log4j
. Затем, когда я запускаю mvn eclipse: eclipse
, это то, что я получаю в сгенерированном .settings / org.eclipse.wst.common.component
:
<project-modules id="moduleCoreId" project-version="2.0">
<wb-module deploy-name="example-mvn-Q2713648">
<property name="context-root" value="example-mvn-[artifactId]"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<property name="java-output-path" value="/target/classes"/>
<dependent-module archiveName="log4j-1.2.14.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
</wb-module>
</project-modules>
log4j
существует и публикуется. Что я пропустил?
Обновление: Я вставил предоставленный pom в свой проект war
, изменил его на использование версии 2.8 плагина eclipse и удалил src / main / webapp
из элемента resources
(это не ресурс), и это то, что я получаю при запуске mvn eclipse: eclipse
:
<project-modules id="moduleCoreId" project-version="2.0">
<wb-module deploy-name="example-mvn-Q2713648">
<property name="context-root" value="example-mvn-[artifactId]"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<property name="java-output-path" value="/target/classes"/>
<dependent-module archiveName="hsqldb-1.8.0.10.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
</wb-module>
</project-modules>
Мне нравится.
Обновление 2: Как я писал в комментарии к вашему собственному ответу, я не думаю, что плагин eclipse будет генерировать динамический веб-модуль для проекта с упаковкой типа jar
. Если вы измените упаковку war
, она должна вести себя должным образом. Я почти уверен, что это причина твоих проблем.
Пример pom (на pastie.org)
Я удалил ~ 60 зависимостей из исходного pom.xml
кроме этого ничего не изменилось. Вам просто нужно создать webapp-archetype
и вставить pom в сгенерированный (командой archetype)
mvn archetype:create
-DgroupId=example
-DartifactId=mvn
-DarchetypeArtifactId=maven-archetype-webapp
После этого eclipse: eclipse
приведет к сгенерированному . settings / org.eclipse.wst.common.component
, который теперь показывает project-version = "2.0"
(после того, как я внес различные изменения с 1.0 на 1.5 и 2.0), но все еще < зависимый-модуль>
отсутствует.
<project-modules id="moduleCoreId" project-version="2.0">
<wb-module deploy-name="example-mvn-mvn">
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<wb-resource deploy-path="/" source-path="src/main/resources"/>
</wb-module>
</project-modules>
Обновление (@ Pascal Thivent): Это хороший аргумент. Наш проект (веб-фреймворк) на самом деле имеет две смешанные особенности. Существует jar-Packing
, который используется для обеспечения возможностей фреймворка, при запуске он расширяется в структуру webapp (WEB-INF / ...)
Но он также должен можно запускать фреймворк с его расширениями в самом контейнере сервлетов, поэтому мы можем разработать базовую функциональность, не упаковывая ее как jar, и использовать ее с настраиваемым проектом. Итак, jar
здесь правильный.
Обновление 2
Исходный код (EclipseWtpComponentWriter) из maven-eclipse-plugin
показывает, что это жестко запрограммировано и нет возможности запустить затем пункт, за исключением установки пакета
на war
, или я что-то пропустил? : (
private void writeModuleTypeComponent( XMLWriter writer, String packaging,
File buildOutputDirectory, EclipseSourceDir[] sourceDirs,
ArtifactRepository localRepository)
{
if ( Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase( packaging ))
{
// Adding the <dependent-modules> stuff
}
}