2011-11-07 31 views
9

Tôi có xây dựng của tôi thiết lập để tôi vượt qua trong biến tôi qua dòng lệnh:Làm cách nào để xác định và đặt thuộc tính môi trường bị thiếu trong Maven?

mvn clean install -DsomeVariable=data 

Trong pom của tôi, tôi có:

<someTag>${someVariable}</someTag> 

này hoạt động tốt, nhưng tôi muốn xác định nếu someVariable không được chỉ định trên dòng lệnh, và sau đó mặc định nó để kịch bản của tôi có thể tiếp tục.

Điều này có thể thực hiện trong Maven không?

Trả lời

12

Bạn có thể chỉ định giá trị tài sản mặc định trong phần properties file POM của bạn:

<properties> 
    <someVariable>myVariable</someVariable> 
</properties> 

Nếu bạn muốn chắc chắn rằng giá trị tài sản là LUÔN cung cấp trên một dòng lệnh, sau đó bạn có thể sử dụng maven-enforcer-plugin.

Dưới đây là một liên kết cho thấy làm thế nào để thực thi sự hiện diện sở hữu hệ thống ->http://maven.apache.org/enforcer/enforcer-rules/requireProperty.html

tôi sẽ chỉ cần sao chép nguyên văn XML đây trong trường hợp liên kết ở trên xấu đi.

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <version>1.0.1</version> 
     <executions> 
      <execution> 
      <id>enforce-property</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <requireProperty> 
        <property>basedir</property> 
        <message>You must have a basedir!</message> 
        <regex>\d</regex> 
        <regexMessage>You must have a digit in your baseDir!</regexMessage> 
       </requireProperty> 
       <requireProperty> 
        <property>project.version</property> 
        <message>"Project version must be specified."</message> 
        <regex>(\d|-SNAPSHOT)$</regex> 
        <regexMessage>"Project version must end in a number or -SNAPSHOT."</regexMessage> 
       </requireProperty> 
       </rules> 
       <fail>true</fail> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 
+0

Thank-you cho các phản ứng sâu sắc Alex. Mặc dù tôi đang tìm cách mặc định thuộc tính thay vì thực thi nó. Vì vậy, nếu nó không được chỉ định thì kịch bản sẽ sử dụng giá trị mặc định. – TERACytE

+0

@TERACytE. Có, một giá trị trong phần 'thuộc tính' là một giá trị mặc định và bạn luôn có thể ghi đè nó từ dòng lệnh. –

+0

Cảm ơn bạn đã trả lời. – TERACytE

2

Bạn có thể sử dụng cấu hình thay vào đó, nhưng bạn sẽ cần tiểu sử cho mỗi biến số .

<profile> 
    <id>default-value-1</id> 
    <activation> 
      <activeByDefault>false</activeByDefault> 
      <property> 
      <name>!someVariable</name> 
      </property> 
    </activation> 
    <properties> 
     <someVariable>DEFAULT-VALUE</someVariable> 
    </properties> 
</profile> 
4

Bạn có thể chỉ định giá trị mặc định như

<properties> 
     <someTag>defaultValue</someTag> 
</properties> 

Khi bạn chạy lệnh maven, bạn có thể ghi đè lên giá trị đó như thế này

mvn clean package -DsomeTag=newSpecificValue 
+0

Giải pháp SImple i cần thiết để sử dụng trong xây dựng Jenkins – pdem

Các vấn đề liên quan