2015-04-23 4 views
1

У меня есть большой проект Maven с одним главным модулем и множеством детей, организованный в красивой древовидной структуре. Однако для некоторых модулей требуются специальные настройки, которые могут вызвать неправильное поведение в других модулях. Например, в Hadoop есть модули, которые нуждаются в уровне источника Java 1.7, все остальные модули Java используют исходный уровень 1,8, и теперь в это дерево вводятся модули Scala, которые компилируются с помощью scala-maven-plugin, для которого требуются специальные настройки для maven-compiler-plugin при компиляции смешанных модулей Java/Scala.Как активировать профиль Maven на pom.xml?

В прошлом у меня просто был мастер-модуль для материала Hadoop, который определил исходный уровень 1.7 и добавил все необходимые зависимости Hadoop. Теперь я хочу избежать определения другого основного модуля для материала Hadoop, написанного на Scala, и еще одного модуля для Non-Hadoop в Scala. Я думал, что я мог бы использовать профили, поэтому я определил два профиля в моем мастер-POM:

  • java активирует maven-javadoc-plugin
  • scala не активирует maven-javadoc-plugin но maven-scala-plugin и настраивает его как в the example from its documentation

В главном POM профиль java по умолчанию установлен как активный, поскольку Java по умолчанию. Когда в проекте используется Scala, я хочу активировать профиль scala и деактивировать java, но настройка activeByDefault на false для профиля java не оказывает влияния, в результате чего возникают ошибки компиляции.

Итак, есть ли способ включить профиль, специфичный для модуля, без необходимости устанавливать его вручную в каждой помпе?

ответ

0

Если вы хотите настроить Maven профиль для каждого проекта (модуля), то вы должны добавить настройки профиля в проекте (модуль) файл pom.xml

<profiles> 
    <profile> 
    <activation> 
     <jdk>1.4</jdk> 
    </activation> 
    <your properties goes here> 
    </profile> 
</profiles> 

Кроме того, если вы не хотите, чтобы выполнить некоторые профиль, то вы должны добавить

mvn groupId:artifactId:goal -P !profile-1,!profile-2 

в проекте pom.xml файл

+0

Это означает, что, когда у меня есть модули A, B и C, а A и B используют профиль Java, а C использует Scala, я должен отдельно добавлять эти профили во все модули? – rabejens

1

насколько я понял, вы хотите, чтобы активировать профиль из детского пОМ на основе его конфигурации. Боюсь, это невозможно. Однако вы можете реорганизовать структуру древа проекта, чтобы воспользоваться преимуществом наследования pom: pom.xml // general properties for all projects |-- java-modules | -- pom.xml // inherits from master pom, configures maven-compile-plugin | -- java-8-modules | -- pom.xml // inherits from java-modules pom, uses java 8 compiler | -- java-8-project-a | -- java-7-modules | -- pom.xml // inherits from java-modules pom, uses java 7 compiler | -- java-7-project-a |-- scala-modules -- pom.xml // inherits from master pom, configures maven-scala-plugin -- scala-project-a Вы пишете один главный помп для всех модулей в топ-каталоге, детские помпы просто задают детали java/scala.

Подробнее о наследовании п https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance

0

Не используйте профиль, Матеуш Бальбус ответ, то есть определить вложенный П-упаковано проект, которые определяют Java и SCALA модули соответственно

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