2015-12-10 4 views
0

Я не знаком с Maven и пытаюсь выяснить, как это работает с нашим существующим проектом.Какой профиль Maven выполняется, если профиль не задан через -P?

проекта и структура папок в основном

А \ 1

A \ 2

A \ 3

Внутри каждой папки представляет собой ПОМ файл. Каждая помпа содержит 1 или более определенных профилей. То, что я не понимаю, с помощью этой команды

A> MVN установить

Как все ПОМ получить выполнены и какие профили выполняется?

Я не вижу никаких тегов, отмеченные activebydefault

Разочарованный, когда мне нужно тратить время на обучение на этапе 1 и построить несколько проектов, но я вынужден быть на шаге 50, без кого в команде который знает первое о Maven. Конечно, решения всегда нужно вчера.

+2

Вы просмотрели документы Maven для [профилей] (http://maven.apache.org/guides/introduction/introduction-to-profiles.html)? Кроме того, вполне возможно, что по умолчанию профиль не активен. Однако, чтобы узнать, что происходит во время сборки, вы можете выполнить 'mvn help: active-profiles'. – nickb

+0

Благодарим вас за ссылку и ссылку на команду mvn. – Elijah

+0

Выполнение команды * mvn help: active-profiles * предоставляет эту информацию. Действуют следующие профили: - main (источник: внешний) - defaultProfile (источник: внешний) ........... ... Я предполагаю, что это часть функциональности по умолчанию для Maven, но не говорит мне, что она делает. Так много, чтобы учиться так мало времени. – Elijah

ответ

3

Profiles может быть указан в вашем POM в родительском POM в ваших настройках. Следовательно, просмотр только вашего POM-файла может быть недостаточным.

Запуск mvn help:active-profiles даст вам список всех активных профилей и из какого источника (пом или настройки).
Запуск mvn help:all-profiles предоставит вам список всех доступных профилей, активных и из которых источник (pom или настройки).

Запуск mvn help:effective-pom -Doutput=full-pom.xml предоставит вам полный файл POM (в файле сгенерированный full-pom.xml), как слияние текущего pom, родительского помпы и настроек. Это было бы полным источником истины.

Структура вы описали для проекта Maven мульти-модуля, что означает A является aggregator проект (с упаковки pom, его только поставка является ПОМ файла, его единственная функция заключается в обеспечении modules он будет строить).
Однако будьте осторожны, что в агрегации Maven и inheritance существуют две разные концепции, которые часто используются вместе: агрегация означает, что я буду строить как часть моей сборки всех моих определенных модулей; Наследование означает, что я наследую конфигурацию от моего родительского пом. Таким образом, A\1 может наследовать профили из проекта A, если в pom A\1 вы найдете A, который определяется как parent (что часто бывает, чтобы иметь агрегатор, который также является родительским для всех определенных модулей).

Зачем нужен агрегатор?Чтобы иметь централизованное построение и расположение взаимосвязанных подпроектов, в то же время сохраняя хорошее разделение проблем между подмодулями. Более того, в качестве лучших практик Maven, проект должен генерировать только один артефакт, поэтому может быть, например, иметь веб-приложение, имеющее логику в одном модуле, военное поколение в другом модуле, например, слух в еще одном модуле.

Зачем иметь наследование? Чтобы иметь централизованное место для установки общей/общей конфигурации, например профилей, а также зависимостей и dependencies management.

Наконец, это недоразумение, и, следовательно, быть также известно, что:

  • Если профиль активен по умолчанию в Maven, он будет частью сборки по умолчанию. Однако, если вы активируете профиль через командную строку (через опцию -P), вы затем активируете запрошенный профиль, а также и автоматически деактивируете тот, который был активным по умолчанию
  • указанный выше механизм не применяется к профилям, определенным в settings.xml вашей установки maven (которые применяются по умолчанию, если они активированы, для всех Maven на соответствующем компьютере).

Update Еще замечание по этому ответу, мобилизуемого некоторые комментарии: а Maven сборка указана как часть секции build (поток плагин казни), которые не обязательно профилей. Профили обычно определяются для добавления дальнейшего поведения в сборку, но хорошая практика заключается в том, чтобы построить сборку успешно независимо от любого активируемого профиля, то есть мне не нужно знать о определенных профилях для запуска вашей сборки, это основная концепция maven, гармонизация и согласование конфигурации: учитывая проект Maven, я всегда могу предположить, что просто mvn clean install выполнит требуемую магию.
Для получения списка распространенных вопросов о старте с Maven, официальный Getting Started Guide уже дает хорошую помощь.
Также ознакомьтесь с Profiles Pitfalls официального введения в профили для дальнейшего ознакомления с профилями.

+0

Если все файлы pom содержат профиль с тем же именем, означает ли это, когда вы вызываете родительский pom (A в этом случае), что все файлы pom подпапки с этим именем в своих профилях будут выполнены или это только профиль родительских poms с этим именем? И если это не так, как бы кто-то назвал родительский pom именем профиля и профилем sub pom с другим именем? – Elijah

+1

Все будет выполнено тогда –

2

Ни один из профилей не активен, если только у вас нет отмеченного как activeByDefault.

+0

Что-то должно быть активным, если это не так, потому что при выполнении установки mvn он все еще что-то создает.Я интерпретирую «Нет профиля активен», поскольку ничего не должно строиться, но это не так, и что именно эта вещь волшебным образом знает, как это сделать? – Elijah

+2

Нет. Профиль не должен быть активным. Вы можете представить профиль как оверлей поверх базовой POM. Красота здесь - это «волшебство» жизненного цикла Maven. – JJF

+0

@Elijah - Значит, вы не читаете документацию, и тогда вы просите кого-то сделать это за вас, и ложка подаст вам ответы без какого-либо понимания, тогда вы чувствуете, что можете спорить со своими ответами? –

Смежные вопросы