Możesz osiągnąć swój faktyczny cel włączenia wtyczki źródła-jars domyślnie poprzez dodanie dwóch profili do POM. W Maven profiles documentation zauważa, że można dodać element <activeByDefault>true</activeByDefault>
do sekcji activation
i stwierdza, że
Ten profil będzie automatycznie aktywna przez cały buduje chyba że inny profil w tym samym POM jest aktywowany za pomocą jednej z opisanych wcześniej metod
Można więc dodać dwa profile, z których jeden to activeByDefault
, który zawiera odpowiednią wtyczkę, i drugi, który można aktywować w dowolny standardowy sposób (na przykład -P
z wiersza poleceń), aby zapobiec domyślnemu profil z uruchomieniem. Sekcja w swoim pom.xml
(lub ustawieniami Mavena lub cokolwiek) profiles
może zatem wyglądać następująco:
<profile>
<id>source-jars</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
...
</plugin>
</plugins>
</build>
</profile>
<profile>
<!-- active this profile to disable the source-jars plugin -->
<id>no-optional-plugins</id>
</profile>
Niestety, nie widzę sposobu, aby ta metoda skalowania dobrze do zwalczania wielu wtyczek - Myślę, że trzeba Profile O(n^2)
dla wtyczek n
, ale w tym prostym przypadku powinno działać dobrze.
Innym ewentualnie prostsza opcja z Maven ≥ 2.0.10 jest po prostu mieć profil source-jars
z góry (wciąż activeByDefault
) oraz manually deactivate the profile kiedy chcesz poprzedzając identyfikator profilu z -
lub !
po flagi -P
CLI:
$ mvn -P !source-jars
Ta metoda nie ma takich samych problemów z O(n^2)
z wieloma wtyczkami, ale jest również mniej elastyczna, ponieważ dezaktywacja nie może zostać uruchomiona przez właściwość systemu, zmienną środowiskową, wersję JDK itp.
Nasze poms są pisane domyślnie, domyślnie maven-source-plugin, więc będę musiał je zrestrukturyzować, tak jak sugerujesz. –
Istnieje wiele przypadków, w których wtyczki powinny być domyślnie włączone i wyłączone przy użyciu profilu. Myślę, że ta odpowiedź pozwala uniknąć problemu bez jego rozwiązania. – Kevin
@Mowgli Ale system profili maści nie jest do tego odpowiedni: istnieje tylko mechanizm "aktywacji", a nie mechanizm "dezaktywacji". Niektóre wtyczki radzą sobie z tym, tworząc własny mechanizm dezaktywacji (np. SkipTests for surefire plugin). –