Oprócz aktywacji profilu, Maven nie ma wdrożonej logiki boolowskiej. Więc jeśli chcesz zanegować właściwość, aby przekazać ją do wtyczki, musisz to zrobić samodzielnie. To jest trochę niezdarny, ale można użyć cel build-helper-maven-plugin:bsh-property
, który umożliwia napisać BeanShell script i eksportu zmiennych zdefiniowanych w nim jako właściwości Mavena:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>negate-prop</id>
<phase>initialize</phase>
<goals>
<goal>bsh-property</goal>
</goals>
<configuration>
<source>dontDoSomething = !${doSomething};</source>
<properties>
<property>dontDoSomething</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>
Nie można zastąpić własność, ale można zdefiniować nowy zawierający wynik negacji; w powyższym przykładzie jest to dontDoSomething
. Jest to wykonywane w fazie initialize
, aby pozostałe wtyczki mogły używać go jako parametru, ze standardem ${dontDoSomething}
.
Można to ulepszyć, aby mieć domyślną wartość dla dontDoSomething
, jeśli doSomething
nie istnieje.
<source>
value = project.getProperties().getProperty("doSomething");
dontDoSomething = value == null ? false : !Boolean.parseBoolean(value);
</source>
BeanShell to język skryptowy, który bardzo przypomina język Java i można korzystać z istniejących metod Java. W powyższym przykładzie właściwość "doSomething"
jest pobierana z właściwości projektu (project
jest wstrzykiwana przez wtyczkę w czasie oceny przy bieżącym projekcie Maven); nie jest zdefiniowany, zwracamy false
, w przeciwnym razie negujemy wartość.
Jeśli doSomething
jest szczególnie właściwością systemu, może być również możliwe (ab) użycie funkcji aktywacji profilu poprzez 2. Profile: jedna aktywowane przez właściwość jest true
i ustawienie innego false
, a druga profil robi odwrotność:
<profiles>
<profile>
<id>pro-1</id>
<activation>
<property>
<name>doSomething</name>
<value>!false</value>
</property>
</activation>
<properties>
<dontDoSomething>false</dontDoSomething>
</properties>
</profile>
<profile>
<id>pro-2</id>
<activation>
<property>
<name>doSomething</name>
<value>false</value>
</property>
</activation>
<properties>
<dontDoSomething>true</dontDoSomething>
</properties>
</profile>
</profiles>
to nie będzie działać, jeśli doSomething
jest właściwością Maven ustawić w <properties>
tagu na przykład. Musi zostać przekazana jako właściwość systemowa z mvn -DdoSomething=true|false
. Odpowiedni profil zostanie aktywowany zgodnie z wartością właściwości systemowej, która zdefiniuje właściwość dontDoSomething
na odwrotność. Jeśli właściwość nie zostanie zdefiniowana, będzie aktywna pro-1
, ustawiając dontDoSomething
na wartość domyślną false
. Wszystko to jest dość brzydkie ...
Czy możesz udostępnić bieżące polecenie, którego używasz do pominięcia włączania Zrób czegoś. – nullpointer
@nullpointer To niestandardowy plugin. Zobacz '$ {download.cmake}' na https: // github.com/cmake-maven-project/cmake-maven-project. Chcę pominąć pobieranie, jeśli użytkownicy ustawią tę właściwość na false, ale wtyczka faktycznie przyjmuje negację tej wartości jako dane wejściowe (parametr ""). –
Gili
proszę dodać szczegóły do pytania, o kontekst wtyczki twojego pom.xml i metodę wykonania, którą obserwujesz obecnie. Nie widzę '$ {download.cmake}' w podanym odsyłaczu. – nullpointer