Benötigen Maven-Eigenschaft definiert werden, die in der Kinder-Module
Ich vor kurzem verwendet die Maven Enforcer Plugin zu Mandat, dass alle POMs definieren foo.bar
Eigenschaft. Setzte ich diese Aussage in meinem corporate-POM und angenommen, es würde gelten dann für mein Kind-Projekte.
Zu meinem Entsetzen (aber nicht überraschend), wurde die Regel auch durchgesetzt, auf mein Firmen-POM. Als Ergebnis habe ich pflichtbewusst definiert einen Platzhalter foo.bar
Eigentum und dachte, ich war erledigt.
Leider alle untergeordneten Projekte, Erben diese Eigenschaft und Durchlaufen dabei die enforcer test. Ich bin Links, nicht in der Lage, um zu bestimmen, ob die Kinder müssen explizit definiert diese Eigenschaft oder nur geerbt ein Quatsch Wert. Kann mir jemand einen Weg vorschlagen: entweder
-
sicherzustellen, dass dieses (bestimmte) Regel wird nicht angewendet zu meinem coporate POM; oder
-
sicherzustellen, dass meine Platzhalter-Eigenschaft wird nicht vererbt, indem Sie die untergeordneten Projekte; oder
-
mein problem lösen anderen Weg?
Falls es hilft, die definition der mein enforcer-Regeln ist unten dargestellt. Dieser Schnipsel ist aus meiner corporate-POM.
<!-- Enforce good behaviour in child POMs -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>enforce-good-behaviour</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireProperty>
<property>foo.bar</property>
<message>NAUGHTY!</message>
<regex>.+</regex>
<regexMessage>The property must contain at least one character.</regexMessage>
</requireProperty>
</rules>
</configuration>
</execution>
</executions>
</plugin>
Mein Ziel war, automatisch der Wert dieser Eigenschaft als Teil der SCM-tagging-Anweisung. Ich habe Folgendes snippet in meinem corporate-POM definiert eine nette tagging-Schema für mein Kind-Projekte:
<!-- Ensure we use a consistent tagging scheme for releases -->
<plugin>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<tagNameFormat>a.b.c.${foo.bar}</tagNameFormat>
<useReleaseProfile>false</useReleaseProfile>
</configuration>
</plugin>
- Seien Sie vorsichtig, denn jeder kann den enforcer.überspringen-Eigenschaft auf true-bypass, was Sie versuchen zu erreichen.
- Danke für die Warnung. In meinem Umfeld, Menschen, die nicht aktiv versuchen, Sie zu untergraben, das system wird also hoffentlich in Ordnung sein. Und wenn Sie es tun, gut... ich bin der boss und Sie sind zum scheitern verurteilt 🙂
- Vereinbart - und, wenn Sie beschließen, aktiv zu unterlaufen, das SCM-system könnte Würgen auf der
${}
chars irgendwie sowieso, so dass Sie mit einem Chaos zu bereinigen (und erklären müssen, Duncan, warum Sie das tun). - Duncan - guter deal. Ich habe nur erwähnt, dass es zu hatte ich ein paar Jungs set "maven.test.skip", um die wahre Ursache, die Sie wusste nicht, wie junits läuft jeder bauen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich genau dieses gleiche dilemma. Hier ist, wie ich es gelöst.
In der corporate POM, ich habe ein Profil wie dieses:
Dann, wie der Kommentar sagt, ich Baue die corporate POMs mit
mvn -Dcorporate.build=true clean deploy
Andere Dinge, die Sie überspringen möchten, gehen könnte in diesem Profil als gut. Funktioniert wie ein Charme.
Den requirePropertyDiverges Regel der extra-enforcer-Regeln können Sie überprüfen, ob eine Eigenschaft definiert ist, die in Ihrem übergeordneten POM überschrieben, in der das Kind POM.
Für Ihren Anwendungsfall die Konfiguration sollte so etwas wie dieses (habe es noch nicht getestet):