2014-09-15 5 views
5

Я использую Maven для создания некоторых проектов, и он использует плагин gMaven для создания RPM, который включает в себя основной артефакт. Я хочу, чтобы Maven попытался создать RPM в системах с rpmbuild, а не в системах, которые этого не делают, поэтому я построил два отдельных профиля, один из которых должен быть по умолчанию, и тот, который должен активироваться, когда в семействе Unix ОПЕРАЦИОННЫЕ СИСТЕМЫ.Почему Maven не использует ожидаемый профиль?

Я мог бы поклясться, что я его протестировал, и все работает правильно, но теперь он работает с профилем семейства Unix, даже когда я создаю OSX. Однако, если я изменил семейство ОС профиля на «окна», он определенно знает, что это не на машине Windows и поэтому запускает профиль по умолчанию.

Вот соответствующий раздел моего файла pom.xml:

<profiles> 
    <profile> 
     <id>default-profile</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <rpmPhase>none</rpmPhase> 
     </properties> 
    </profile> 
    <profile> 
     <id>rpm-profile</id> 
     <activation> 
      <os> 
       <family>unix</family> 
      </os> 
     </activation> 
     <properties> 
      <rpmPhase>package</rpmPhase> 
     </properties> 
    </profile> 
</profiles> 

В выводе Maven:

OS name: "mac os x", version: "10.9.4", arch: "x86_64", family: "mac" 

Однако Maven устанавливает rpmPhase в "пакет", вместо «нет , "который не является ожидаемым поведением.

Может ли кто-нибудь увидеть, если я что-то упустил?

EDIT:

Кроме того, если установить семействуОС к чему-то, что не существует, или если я закомментировать блок активации вообще, то используется профиль по умолчанию, так что кажется, что Maven активно соответствие мой OSX с семейством ОС Unix.

ответ

1

Так что, оглянувшись, кажется, что OSX соответствует «Unix family» под Maven. По-видимому, флажок проверяет любую ОС, заканчивающуюся на «х» как семейство Unix, которая кажется глупым способом сделать это. К сожалению, не кажется, что вы можете делать какие-либо операторы AND или OR, поэтому вам нужно выбрать одну семью и одну семью. Из-за этого я изменил unix на! Mac, чтобы избежать проблемы в OSX. Разумеется, это будет происходить, если сборка была запущена в Windows.

+0

Хорошо OSX - это операционная система UNIX - она ​​основана на BSD. – OrangeDog

5

У меня была такая же проблема, Херес выпуск JIRA объяснения проблемы:

https://jira.codehaus.org/browse/MNG-4983

Они говорят, что его на самом деле не ошибка. Ниже приведено обходное решение, если вам нужно, чтобы OSX и Unix были отдельными:

<os> 
    <family>unix</family> 
    <name>!mac os x</name> 
</os>