Наложения Maven и Eclipse

#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 проблемы:

  1. При внесении некоторых изменений в B, если я запускаю сборку maven на A, я не вижу изменений в результирующем разнесенном архиве.

  2. Попытка развернуть 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 для сборки проектов, но это правда, что я НЕ увеличивал номер версии. На данный момент это начало проекта, и я делаю множество небольших изменений, тестов и так далее, Поэтому я решил, что это не оправдывает увеличения номера версии.