#java #eclipse #web-applications #maven
#java #eclipse #веб-приложения #maven
Вопрос:
У меня есть 2 веб-проекта Maven A и B. B содержат некоторые общие части, а A зависит от B.
В pom.xml У меня есть:
<dependencies>
<dependency>
<groupId>com.mygroup</groupId>
<artifactId>B</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
</plugin>
</plugins>
</build>
У меня 2 проблемы:
-
При внесении некоторых изменений в B, если я запускаю сборку maven на A, я не вижу изменений в результирующем разнесенном архиве.
-
Попытка развернуть A из Eclipse не работает — содержимое B не включено в результирующий архив war / exploded.
Спасибо за вашу помощь.
Ответ №1:
Что ж, если вы что-то измените в B, вам придется переустановить это в свой локальный репозиторий maven ( mvn install
) для других локальных проектов, которые имеют это в качестве зависимости, чтобы получать последние изменения.
При создании проекта maven лучше всего, если вы создаете его с помощью Maven (например, с помощью таких команд, как mvn package
), а не с помощью какого-либо другого инструмента для сборки (например, Eclipse). Если вы хотите создать его в стиле Maven, но не выходя из своего графического интерфейса Eclipse, вы можете установить плагин m2_eclipse из :
http://m2eclipse.sonatype.org/installing-m2eclipse.html
который интегрирует Maven с Eclipse. Затем, когда вы сразу нажмете на свой проект в Eclipse, в разделе «Выполнить …» у вас появится опция, которая позволяет Maven создавать его, перенаправляя весь вывод консоли в окно консоли Eclipse.
И в качестве заключительного замечания, в настройке, подобной приведенной выше, в идеале вы должны создать родительский проект Maven (упакованный как «pom»), который имеет в качестве дочерних проекты B и A (в таком порядке). Таким образом, если вы что-то изменили в обоих проектах и хотите, чтобы все было построено с использованием последних изменений, вы можете просто выполнить установку maven на родительский pom, и Maven обо всем позаботится.
Комментарии:
1. На самом деле, это настройка, которая у меня уже есть. У меня есть m2eclipse, но то, что я хотел бы сделать, это заставить Eclipse обрабатывать развертывание, чтобы я мог развертывать и запускать проекты прямо из Eclipse. В конце концов, Eclipse должна быть интегрированной средой разработки (акцент на INTEGRATED). Итак, я хотел бы, чтобы он обрабатывал все — редактирование, компиляцию, сборку, развертывание, запуск сервера и отладку. С моими текущими настройками я не могу выполнить развертывание из Eclipse (что вы можете сделать без каких-либо проблем, если у вас есть только один веб-проект).
2. Да, вы можете, я делаю то же самое, что вы хотите от Eclipse. Вот реальный пример: у меня есть проект mvn, настроенный с помощью плагина Jetty, верно, так что, если я выполню mvn jetty: run в командной строке, он запустится в jetty, и любое изменение, которое я внесу в Eclipse, будет развернуто «горячим» способом. Теперь я создал пользовательский maven runner в eclipse, который просто выполняет эту команду mvn jetty: run. Таким образом, я могу запустить его из eclipse.
3. Плагин m2eclipse был передан Sonatype в фонд Eclipse foundation. Более новые версии плагина доступны по адресу eclipse.org/m2e
4. M2E сам по себе не решит проблему с оверлеями WAR. Для этого вам понадобится соединитель M2E, называемый M2E-WTP ( github.com/sonatype/m2eclipse-wtp/wiki ), которые могут быть установлены из Eclipse через
Preferences->Maven->Discovery->Catalog
. В качестве альтернативы вы можете получить M2E-WTP непосредственно с сайта обновления.
Ответ №2:
Усиливая точку зрения @AndreiBodnarescu, вы можете не видеть изменения, внесенные вами в project-B при сборке project-A, потому что изменения недоступны в репозитории Maven.
Если project-B создается на том же компьютере, можете ли вы убедиться, что вы использовали mvn install
для установки в свой локальный репозиторий? Если project-B является производным от сборки на другом компьютере, тогда используйте mvn deploy
для развертывания project-B в общем общем репозитории. В этом случае вы можете по-прежнему не использовать project-B, если вы не используете управление версиями на моментальном снимке или не увеличиваете номер версии project-B.
Я вижу, что B имеет тип war
. Что представляет собой упаковка A? Это EAR? Если это так, то использование maven-war-plugin
с project-A не поможет.
Комментарии:
1. Ну, не для того, чтобы быть вредителем, но просто чтобы я мог избежать любой потенциальной путаницы, разве это не то, что я сказал 40 минутами ранее?
2. @AndreiBodnarescu Хотя есть сходства, я почувствовал, что есть некоторые моменты, которые можно было бы добавить. Отсюда и мой ответ. Я не понимаю, как мои некоторые предложения вызывают «путаницу». Для пущей убедительности я отредактировал, чтобы ссылаться и на ваш ответ.
3. Круто, спасибо за разъяснение. Я не был саркастичным, вы знаете, мне было искренне интересно, не упускаю ли я чего-то или наши ответы в чем-то похожи. В любом случае, ваше больше подходит к делу, так что 1.
4. Оба проекта относятся к типу war, оба построены на одной машине. Я использую install для сборки проектов, но это правда, что я НЕ увеличивал номер версии. На данный момент это начало проекта, и я делаю множество небольших изменений, тестов и так далее, Поэтому я решил, что это не оправдывает увеличения номера версии.