Веб-приложение знатока с плагином затмения знатока не генерирует <зависимый модуль>

Я использую eclipse:eclipse цель генерировать среду Проекта Eclipse. Развертывание хорошо работает. Цель создает записи пути к классу var для всех необходимых зависимостей.

С m2eclipse был Контейнер Знатока, который определяет папку экспорта, которая была WEB-INF/lib для меня. Но я не хочу полагаться m2eclipse таким образом, я больше не использую его.

записи пути к классу, которые сгенерированы eclipse:eclipse цель не имеет такой папки экспорта.

При начальной загрузке контейнера сервлета с WTP это публикует все ресурсы и классы кроме библиотек к контексту.

То, что отсутствует для публикации необходимого, освобождает, или разве который не возможен без m2eclipse интеграции?

Enviroment

  • Eclipse 3.5 Java EE Galileo
  • Знаток Apache 2.2.1 (r801777; 06.08.2009 21:16:01 +0200)
  • Версия Java: 1.6.0_14
  • m2eclipse

Сменная затмением знатоком конфигурация

    <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.

Следующие проблемы отмечены ситуаций, что у меня есть два жизненных цикла сборки в одном англичанине знатока.

9
задан Arjan Tijms 25 July 2013 в 08:02
поделиться

2 ответа

Чего не хватает для публикации необходимых библиотек, или это невозможно без интеграции 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 , она должна вести себя должным образом. Я почти уверен, что это причина твоих проблем.

4
ответ дан 3 November 2019 в 07:46
поделиться

Пример 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
   }
}
0
ответ дан 3 November 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: