2009-01-08 1 views
19

Ich gründe ein Maven-Aufbau und der Zielserver muss auf der Kommandozeile als eine Eigenschaft angegeben werden (die dann das entsprechende Profil wird ausgewählt), zBKann ich Maven 2 zwingen, eine Eigenschaft in der Befehlszeile anzugeben?

mvn -Denv=test 

Ich möchte Der Build schlägt fehl, wenn die Eigenschaft nicht gesetzt ist - ist das möglich?

Ja, ich bin ein Maven Neuling.

EDIT: Ich habe gesehen this link, die implizieren, es ist nicht möglich, aber ich bin mir nicht sicher, wie aktuell es ist.

Antwort

25

Jeder ist in der Nähe, aber es gibt eine Regel in der Enforcer speziell für eine Eigenschaft zu überprüfen, keine Ameise oder flippig Profile erforderlich: http://maven.apache.org/enforcer/enforcer-rules/requireProperty.html

Die Regel kann auch den Wert der Eigenschaft überprüfen.

+0

Viel besser - genau das, was ich gesucht habe. Vielen Dank! – Hobo

2

Meine erste Neigung wäre, ein Profil zu erstellen, das immer aktiv ist, wenn die env -Eigenschaft nicht gesetzt ist und es irgendwie fehlgeschlagen ist. Vielleicht könnten Sie ein Maven-Plugin schreiben, das auf diese Eigenschaft testet und scheitert, wenn es nicht vorhanden ist?

Alternativ könnte man wahrscheinlich mit einem sehr kleinen Ameisenbau-Skript dafür testen.

1

auf edbrannin Alternativlösung zu erarbeiten:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.yourcompany</groupId> 
    <artifactId>yourproject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>checkParam</id> 
      <phase>initialize</phase> 
      <goals><goal>run</goal></goals> 
      <configuration> 
       <tasks> 
       <fail message="'env' property must be set" unless="env"/> 
       </tasks> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

geben Sie die folgende Ausgabe:

[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] An Ant BuildException has occured: 'env' property must be set 

IMHO die einfachste Art und Weise sie (die, die ich für persönlich gehen würde) zu tun .

Sie sogar einen Satz von zulässigen Werte unter Verwendung eines verschachtelten <condition> enthält <or> und <equals>-Tags (siehe Ant Handbuch: http://ant.apache.org/manual/Tasks/conditions.html) kontrollieren konnte

+0

Dies kann direkter mit dem Enforcer-Plugin erfolgen. –

5

Vielleicht könnten Sie eine solche Abhilfe verwenden: in Maven Sie ein Profil aktivieren kann, wenn eine Eigenschaft ist nicht gesetzt:

Dann erzwingen Sie dieses Profil immer fehlschlagen, z mit Maven-Enforcer-Plugin:

<profile> 
    <id>failure_profile</id> 
    ... 
    <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <executions> 
       <execution> 
       <id>enforce</id> 
       <goals> 
        <goal>enforce</goal> 
       </goals> 
       <configuration> 
        <rules> 
        <AlwaysFail/> 
        </rules> 
        <fail>true</fail> 
       </configuration> 
       </execution> 
      </executions> 
      </plugin> 
     </plugins> 
     </build> 
</profile> 

Wenn Sie bieten keine -Denv Build wird dann fehlschlagen:

[INFO] [enforcer:enforce {execution: enforce}] 
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.AlwaysFail failed with message: 
Always fails! 
[INFO] --------------------------------------------------------- 
[ERROR] BUILD ERROR 

Nun, es ist viel ausführlicher dann Ant, aber reine Maven :)

+0

Ausgezeichnet; vielen Dank. Wie du sagst, ist es viel ausführlicher, also bleibe ich bei Oliviers Antwort als meine akzeptierte Antwort. Das bringt mich dazu zu sagen, dass ich eine reine Maven-Antwort möchte - Entschuldigung. Ich wünschte, ich könnte zwei Antworten akzeptieren. – Hobo

Verwandte Themen