2011-06-30 22 views
37

Tôi đang sử dụng tính năng lọc tài nguyên để thay thế một số $ {values} trong tệp thuộc tính.Làm cách nào để sử dụng giá trị mặc định nếu biến môi trường không được đặt để lọc tài nguyên trong maven?

ví dụ: tệp chứa THUỘC TÍNH = $ {VALUE}

Tôi muốn $ {VALUE} được thay thế bằng biến môi trường $ VALUE hoạt động tốt nếu $ VALUE được đặt khi xây dựng chạy. Tuyệt vời.

Tuy nhiên, những env vars chỉ được đặt trong môi trường xây dựng chính thức của chúng tôi (bởi Jenkins) và không phải trong nhà phát triển xây dựng để $ {values} còn lại trong tệp thuộc tính sau khi lọc có thể phá vỡ công cụ. Tôi không muốn yêu cầu vv env trong môi trường nhà phát triển vì điều đó luôn dẫn đến việc xây dựng dev mong manh và devs whiny.

Làm cách nào để sử dụng giá trị biến môi trường nếu được đặt và sử dụng giá trị thuộc tính mặc định khác nếu giá trị env var không được đặt?

Từ thử nghiệm của tôi, nó hoạt động theo cách khác theo mặc định, trong thuộc tính được đặt trong pom sẽ ghi đè biến môi trường cho mục đích lọc tài nguyên.

Cảm ơn

+0

Bạn có thể thấy câu trả lời của tôi ở đây cho một câu hỏi tương tự [Làm thế nào để xác định và thiết lập thuộc tính môi trường còn thiếu trong Maven?] [1] [1]: http://stackoverflow.com/a/24456751/1877108 – Arnab

+0

Bản sao có thể có của [Đặt giá trị mặc định cho thuộc tính Maven 2 tùy chỉnh] (http://stackoverflow.com/questions/899274/setting-default-values -for-custom-maven-2-properties) –

Trả lời

40

Tôi đang sử dụng hồ sơ để xác định như

<profiles> 
    <profile> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
     <property> 
     <name>!myproperty</name> 
     </property> 
    </activation> 
    ... 
    <properties> 
     <myproperty>some value</myproperty> 
    </properties> 
    </profile> 
    ... 
</profiles> 

Xin lưu ý

  1. Các activeByDefault được thiết lập để đúng với mục đích để kích hoạt nó bằng cách mặc định.
  2. !myproperty có nghĩa là thuộc tính này bị thiếu hoặc không tồn tại.
  3. Nếu số myproperty không tồn tại, chỉ cần sử dụng myproperty được xác định tại số properties thay thế.

Bạn có thể xem thêm thông tin tại http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Tôi hy vọng điều này có thể giúp để đạt được yêu cầu của bạn.

Kính trọng,

Charlee Ch.

+7

Cảm ơn rất nhiều vì bình luận của bạn. Tôi đã xóa true để nó sẽ kích hoạt chỉ dựa trên giá trị thuộc tính và tôi đã thay đổi nó thành ! Env.myproperty do đó, nó sẽ nhận biến môi trường. Nhưng bây giờ nó hoạt động hoàn hảo. Cảm ơn sự giúp đỡ của bạn. –

+6

Thật không may, phương pháp này không hoạt động khi bạn có các cấu hình khác được gọi một cách rõ ràng. Trong trường hợp này, các lời gọi hồ sơ ngầm định không được kích hoạt ... – Anton

+1

Nó chỉ là một giá trị mặc định. Tại sao con quạ lại phức tạp thế? –

5

Có cùng vấn đề trong nhóm phát triển của chúng tôi khi sử dụng giá trị môi trường để biểu thị đường dẫn hệ thống tệp - đặc biệt là sự khác biệt giữa linux và cửa sổ.

Dựa trên các giải pháp khác trên cùng một câu hỏi:

<profile> 
    <id>MY_VAR default value</id> 
    <activation> 
     <property> 
      <name>!env.MY_VAR</name> 
     </property> 
    </activation> 
    <properties> 
     <env.MY_VAR>default value</env.MY_VAR> 
    </properties> 
</profile> 
+0

Sử dụng cấu hình có một chút bất lợi - sẽ không chạy khi chạy một cấu hình khác, ngay cả khi được đặt làm mặc định. Bạn cần yêu cầu rõ ràng hồ sơ này khi chạy các cấu hình khác. –

+1

Một giải pháp tốt hơn sẽ là sử dụng kiến, vì nó xuất khẩu các biến cho tất cả để biết. Xem tại đây: http://stackoverflow.com/a/36770198/435605 –

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