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.
InformationsquelleAutor Duncan Jones | 2013-02-07
Schreibe einen Kommentar