Eclipse + Maven + Tomcat: тестирование веб-приложений при построении WAR с настраиваемыми параметрами - PullRequest
8 голосов
/ 24 июня 2011

Я использую Eclipse (Helios) с плагином m2eclipse. Я работаю над проектом веб-приложения на основе Maven, который я тестирую на локальном сервере Tomcat, который настроен внутри Eclipse.

Как правило, это работает более или менее замечательно. "m2eclipse" иногда может быть нестабильным ... но по большей части он синхронизирует мои настройки POM и проекта Eclipse, а также поддерживает актуальность развернутого кода в Tomcat.

Однако недавно я добавил морщинку. У меня есть один файл JavaScript, который должен отличаться при переходе от тестовой среды к реальной производственной среде. Различия слишком значительны, чтобы их можно было четко обработать с помощью фильтрации Maven и замены токенов. Мне нужно было сохранить два отдельных файла в моем проекте и развернуть только один, соответствующий профилю сборки.

Я выполнил это с помощью хитрости "targetPath" в моем Maven POM:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.1.1</version>
   <configuration>
      <webResources>
         <resource>
            <!-- take the stuff from a "prod" or "non-prod" subdirectory and copy it one level up -->
            <directory>src/main/webapp/js/${profile.name}</directory>
            <targetPath>js</targetPath>
         </resource>
         <resource>
            <!-- now don't deploy those profile-specific subdirectories -->
            <directory>src/main/webapp/js</directory>
            <excludes>
               <exclude>prod</exclude>
               <exclude>non-prod</exclude>
            </excludes>
         </resource>
      </webResources>
   </configuration>
</plugin>

Это создает идеальный WAR-файл, который отлично работает, когда я развертываю на нем какой-нибудь внешний сервер Tomcat. Однако проблема в том, что Eclipse НЕ использует этот WAR-файл при запуске Tomcat внутри Eclipse. Вместо этого Eclipse работает с разобранной версией приложения, развернутой в загадочном каталоге, например:

<workspace>/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/MyApp

... и, очевидно, файлы приложения копируются в это местоположение ДО МЭВЕНА, выполняющего небольшую хитрость, показанную выше. Поэтому при локальном тестировании внутри Eclipse в ожидаемом месте вообще отсутствует JavaScript-включение.

Есть ли способ обойти эту проблему? Может быть, изменение Eclipse или изменение Maven, чтобы вытащить файл из «целевого» каталога Maven в каталог «wtpwebapps» Eclipse? Может быть, есть другой подход к решению проблемы, связанной с профилем-включаемым файлом?

Ответы [ 2 ]

10 голосов
/ 24 июня 2011

Начиная с eclipse (Helios) 3.6, опция «Зависимости модуля Java EE» заменяется опцией «Сборка развертывания».Вы можете настроить, какие файлы должны быть развернуты на tomcat, работающем внутри Eclipse, с помощью этого параметра «Сборка развертывания» (Свойства проекта ---> Сборка развертывания)

enter image description here

1 голос
/ 24 июня 2011

Вы можете выполнить развертывание на локальном сервере, используя плагин maven-cargo-plugin вместо запуска непосредственно из Eclipse.Это тогда использовало бы вашу войну, созданную мавенами.

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

...