Как активировать pom.xml, если ОС не принадлежит данному семейству (например, mac)?
С сайта Maven:
...
<profiles>
<profile>
<id>default-tools.jar</id>
<activation>
<property>
<name>java.vendor</name>
<value>Sun Microsystems Inc.</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.4.2</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</profile>
</profiles>
...
tools.jar уже включен на Mac, встроен в classes.jar. Не было никакого способа указать! Mac в настройках активации (кроме перечисления всех ОС кроме Mac) в pom.xml, вместо того, чтобы всегда получать:
ERROR>warning: [path] bad path element ""/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/lib/tools.jar"": no such file or directory
2 ответа
Вы можете использовать "!" модификатор в разделе активации os (пробовал и работает с Maven 3.0.3). Использует тот же алгоритм, что и плагин принудительного применения, описанный здесь.
<profiles>
<profile>
<id>not-mac</id>
<activation>
<os>
<family>!mac</family>
</os>
</activation>
<properties>
<!-- Define non-mac properties here -->
</properties>
</profile>
</profiles>
Смотрите эту статью для более полного описания использования tools.jar в Maven.
Я нашел другой метод. Иметь зависимость в профиле "activeByDefault". Иметь другой профиль (профиль-2), который активируется, если ОС Mac. В соответствии с этим профили "activeByDefault" деактивируются, если активируются другие профили. Таким образом, если операционная система Mac, активизируется профиль 2, который деактивирует профиль "activeByDefault".