2009-05-22 32 views
50

Tôi có một tệp maven pom.xml với một plugin mà tôi muốn có thể kiểm soát trên dòng lệnh. Mọi thứ hoạt động khác tốt, ngoại trừ ngay cả sau khi tìm kiếm trên net một thời gian tôi không thể tìm ra cách để thiết lập một giá trị mặc định cho thuộc kiểm soát của tôi:Đặt giá trị mặc định cho các thuộc tính Maven 2 tùy chỉnh

<plugin> 
    ... 
    <configuration> 
     <param>${myProperty}</param> 
    </configuration> 
    ... 
</plugin> 

Vì vậy, nếu tôi chạy Maven với

mvn -DmyProperty=something ... 

mọi thứ đều ổn, nhưng tôi muốn có một giá trị cụ thể được gán cho myProperty cũng không có công tắc -DmyProperty=.... Điều này có thể giải quyết như thế nào?

Trả lời

43

Câu hỏi cũ nhưng tôi nghĩ câu trả lời đơn giản nhất không có ở đó. Bạn có thể có giá trị mặc định của thuộc tính được xác định trong <build>/<properties> hoặc trong tiểu sử như được hiển thị bên dưới. Khi bạn cung cấp giá trị thuộc tính trên dòng lệnh với -DmyProperty=anotherValue thì nó sẽ ghi đè định nghĩa từ POM. Tôi hy vọng tôi đã có thể giải thích ..

<profile> 
    ... 
    <properties> 
     <myProperty>defaultValue</myProperty>    
    </properties> 
    ... 
     <configuration> 
      <param>${myProperty}</param> 
     </configuration> 
    ... 
</profile> 
1

Điều này có thể làm việc cho bạn:

<profiles> 
    <profile> 
    <id>default</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <build> 
    <plugin> 
     <configuration> 
     <param>Foo</param> 
     </configuration> 
    </plugin> 
    </build> 
    ... 
    </profile> 
    <profile> 
    <id>notdefault</id> 
    ... 
    <build> 
     <plugin> 
     <configuration> 
      <param>${myProperty}</param> 
     </configuration> 
    </plugin> 
    </build> 
    ... 
    </profile> 
</profiles> 

Bằng cách đó,

mvn clean sẽ sử dụng "foo" như param mặc định của bạn. Trong những trường hợp khi bạn cần phải ghi đè lên, sử dụng mvn -P notdefault -DmyProperty=something

+1

Không thể này được đơn giản hóa một chút bằng cách sử dụng một khối kích hoạt để kích hoạt nodefault trừ khi không có tài sản -D đã được thông qua tại tất cả các. – djangofan

+0

@djangofan bạn nói đúng. Tôi đã cố gắng để làm cho câu trả lời của tôi một giọt thay thế cho câu hỏi. – sal

25

Bạn có thể sử dụng một cái gì đó như dưới đây:

<profile> 
    <id>default</id> 
    <properties> 
     <env>default</env> 
     <myProperty>someValue</myProperty>    
    </properties> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
</profile> 
+0

Phải, đã làm điều đó, cảm ơn! –

+0

Tuyệt vời. Không vấn đề gì. –

30

Taylor L's phương pháp hoạt động tốt, nhưng bạn không cần hồ sơ cá nhân thêm. Bạn chỉ có thể khai báo các giá trị thuộc tính trong tệp POM.

<project> 
    ... 
    <properties> 
    <!-- Sets the location that Apache Cargo will use to install containers when they are downloaded. 
     Executions of the plug-in should append the container name and version to this path. 
     E.g. apache-tomcat-5.5.20 --> 
    <cargo.container.install.dir>${user.home}/.m2/cargo/containers</cargo.container.install.dir> 
    </properties> 
</project> 

Bạn cũng có thể đặt thuộc tính trong tệp người dùng settings.xml trong trường hợp bạn muốn mỗi người dùng có thể đặt mặc định của riêng họ. Chúng tôi sử dụng phương pháp này để ẩn thông tin đăng nhập mà máy chủ CI sử dụng cho một số trình cắm từ các nhà phát triển thông thường.

2

giải pháp akostadinov hoạt động tuyệt vời để sử dụng chung ... Nhưng nếu tài sản mong muốn được sử dụng bởi các thành phần lò phản ứng trong giai đoạn phân giải phụ thuộc (rất sớm trong xử lý hệ thống phân cấp mvn pom. ..) bạn nên sử dụng cấu hình "không kích hoạt" để đảm bảo giá trị dòng lệnh được cung cấp tùy chọn luôn được ưu tiên về giá trị được cung cấp bên trong pom.xml. Và điều này bất kể sâu sắc là hệ thống phân cấp pom của bạn.

Để làm như vậy, thêm loại hồ sơ trong pom.xml cha mẹ của bạn:

<profiles> 
    <profile> 
     <id>my.property</id> 
     <activation> 
     <property> 
      <name>!my.property</name> 
     </property> 
     </activation> 
     <properties> 
     <my.property>${an.other.property} or a_static_value</my.property>    
     </properties> 
    </profile> 
    </profiles> 
+1

Bạn có thể hiển thị một ví dụ pom mà bình thường '-D' không hoạt động? – akostadinov

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