Maven для копирования JAR при добавлении зависимостей - PullRequest
9 голосов
/ 28 января 2011

В настоящее время я использую IBM Rational Application Development (дистрибутив IBM Eclipse) для разработки портлетов и имею небольшую проблему с интеграцией Maven.

Вот ситуация:

1) IBM RAD имеет возможность развертывать портлет непосредственно из себя (RUN / DEBUG)

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

2) Зависимости Maven не копируются в каталог WebContent / WEB-INF / lib

IBM имеет свою собственную структуру каталогов: WebContent / WEB-INF и WebContent / META-INF. Если я обновил pom.xml, добавив в него новые зависимости, эти JARS не будут скопированы в каталог WebContent / WEB-INF / lib, поэтому, когда я захочу запустить / отладить портлет, эти библиотеки не будут включены.

Вопрос:

Есть ли способ автоматически скопировать новые JAR-файлы в папку WebContent / WEB-INF / lib, как только я обновлю pom.xml? (если да, то в каком жизненном цикле это должно быть?)

Если нет идеального решения для вопроса № 1, я не против, если этот шаг включен в компиляцию / цель "mvn install".

Предпочитают не использовать ant-task, а вместо этого использовать собственную утилиту копирования maven, если она существует.

Если у кого-то есть предложения по интеграции Maven и IBM RAD для разработки WebSphere Portlet, не стесняйтесь добавлять дополнительные ответы.

Спасибо

Ответы [ 2 ]

2 голосов
/ 31 января 2011

Вот скелет Maven 2 pom.xml, который я выбрал из старого проекта RAD:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>foo</groupId>
  <artifactId>fooproject</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <properties>
    <project.build.sourceEncoding>US-ASCII</project.build.sourceEncoding>
  </properties>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <resources>
      <resource>
        <directory>src</directory>
        <includes><include>**/*.properties</include></includes>
        <filtering>true</filtering>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.1</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1-beta-1</version>
        <configuration>
          <webappDirectory>${project.basedir}/WebContent</webappDirectory>
          <warSourceDirectory>${project.basedir}/WebContent</warSourceDirectory>
          <webXml>${project.basedir}/WebContent/WEB-INF/web.xml</webXml>
          <packagingIncludes>**/*.properties,**/*.jsp,**/*.jar,**/*.class,theme/**/*,images/**/*,**/*.xml,**/*.swf,**/*.tld,**/*.txt</packagingIncludes>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
            </manifest>
          </archive>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <!-- compile classpath -->
  </dependencies>
</project>

Это было применено к структуре каталогов, созданной RAD (версия 7.5, предназначенная для Portal 6.5.x в WAS 7). Это не единственный способ сделать это, и я уверен, что пом можно улучшить, но это послужило своей цели. При необходимости добавьте свои зависимости.

1 голос
/ 08 июля 2011

У меня был тот же вопрос и проблемы с интеграцией Maven и RAD. Я использую RAD 8 с m2e и пытаюсь автоматически развернуть / отладить портлеты для WebSphere Portal 7.

Во-первых, что касается комментария Горкема:

Я не уверен, что это работает для IBM RAD, но с Eclipse WTP вы можете определить части сборки развертывания из свойств проекта.

Это работает в RAD. Я настроил сборку развертывания моего проекта так, чтобы она соответствовала структуре сборки WebSphere и переместил мои зависимости Maven в папку WEB-INF \ lib (Проект -> Свойства -> Сборка развертывания -> Добавить -> Записи пути сборки Java -> Зависимости Maven).

enter image description here

Эта конфигурация позволила мне успешно построить войну, и я могу экспортировать сгенерированный EAR-файл из RAD и вручную развернуть его на локальном сервере, и он отлично работает. Однако параметры автоматического развертывания и запуска на сервере работают не только с этим. По какой-то причине он развернет все транзитивные зависимости (portlet-api, servlet-api и т. Д.) В WebSphere, что вызовет конфликты и взрывы.

Поэтому я попробовал решение pom, предложенное McDowell, с ограниченным успехом - оно не будет правильно компилировать и запускать мои тесты, хотя после удаления тестов оно успешно развернуто из RAD. Я работаю над тем, чтобы он включил тестирование и опубликую свои результаты здесь, когда я получу его.

Я также нашел эту ветку , которая содержит ссылку на 2010 IBM документ о «официальном» способе интеграции Maven и RAD. Я работаю над этим и посмотрю, какое решение лучше соответствует моим потребностям. Опять же, если / когда у меня это будет работать, я опубликую больше информации здесь.


Обновление от 21.11.2011

IBM выпустила обновленный документ для интеграции Maven / RAD. Вы можете найти это здесь . Я прошел через это, и это довольно хорошо сделано. Это шаг за шагом со скриншотами и небольшим фоном для Maven, M2eclipse и WTP. Есть еще пара неприятностей, которые Чак описывает в статье, но в итоге это позволило нашей команде начать использовать Maven в среде WebSphere Portal, не отказываясь от соглашений Maven. Надеюсь, другие найдут это полезным.

...