2008-09-16 22 views
20

Tôi muốn tải một tệp thuộc tính khác dựa trên một biến. Về cơ bản, nếu thực hiện xây dựng dev sử dụng tệp thuộc tính này, nếu thực hiện xây dựng thử nghiệm, hãy sử dụng tệp thuộc tính khác này và nếu thực hiện xây dựng sản xuất, hãy sử dụng tệp thuộc tính thứ ba.Có cách nào để tự động tải tệp thuộc tính trong NAnt không?

Trả lời

26

Bước 1: Xác định một tài sản trong kịch bản Nant bạn để theo dõi môi trường bạn đang xây dựng cho (địa phương, thử nghiệm, sản xuất, vv).

<property name="environment" value="local" /> 

Bước 2: Nếu bạn chưa có một mục tiêu cấu hình hoặc khởi rằng tất cả các mục tiêu phụ thuộc vào, sau đó tạo ra một mục tiêu cấu hình, và chắc chắn rằng các mục tiêu khác của bạn phụ thuộc vào nó.

<target name="config"> 
    <!-- configuration logic goes here --> 
</target> 

<target name="buildmyproject" depends="config"> 
    <!-- this target builds your project, but runs the config target first --> 
</target> 

Bước 3: Cập nhật mục tiêu cấu hình của bạn để kéo trong một tập tin chiếm đoạt tài sản dựa trên thuộc tính môi trường.

<target name="config"> 
    <property name="configFile" value="${environment}.config.xml" /> 
    <if test="${file::exists(configFile)}"> 
     <echo message="Loading ${configFile}..." /> 
     <include buildfile="${configFile}" /> 
    </if> 
    <if test="${not file::exists(configFile) and environment != 'local'}"> 
     <fail message="Configuration file '${configFile}' could not be found." /> 
    </if> 
</target> 

Lưu ý, tôi muốn cho phép các thành viên trong nhóm xác định các tệp local.config.xml của riêng họ không được cam kết kiểm soát nguồn. Điều này cung cấp một nơi tốt đẹp để lưu trữ các chuỗi kết nối cục bộ hoặc các cài đặt môi trường cục bộ khác.

Bước 4: Thiết lập thuộc tính môi trường khi bạn gọi Nant, ví dụ:

  • Nant -D: môi trường = dev
  • Nant -D: môi trường = test
  • Nant -D: environment = production
+0

Dòng không thành công cho tôi với thông báo: "Nhiệm vụ không được phép trong mục tiêu. Phải ở cấp dự án". – vakman

0

Cách tôi đã thực hiện loại điều này là bao gồm các tệp xây dựng riêng biệt tùy thuộc vào loại hình xây dựng bằng cách sử dụng nant task. Phương án thay thế có thể là sử dụng iniread task in nantcontrib.

5

Bạn có thể sử dụng tác vụ include để bao gồm một tệp xây dựng khác (chứa các thuộc tính của bạn) trong tệp xây dựng chính. Các if thuộc tính của nhiệm vụ include có thể kiểm tra đối với một biến để xác định xem việc xây dựng tập tin nên được bao gồm:

<include buildfile="devPropertyFile.build" if="${buildEnvironment == 'DEV'}"/> 
<include buildfile="testPropertyFile.build" if="${buildEnvironment == 'TEST'}"/> 
<include buildfile="prodPropertyFile.build" if="${buildEnvironment == 'PROD'}"/> 
5

Tôi gặp vấn đề tương tự khi câu trả lời từ scott.caligan được giải quyết một phần, tuy nhiên tôi muốn mọi người có thể thiết lập môi trường và tải nộp tính ppropriate chỉ bằng cách xác định một mục tiêu như vậy:

  • Nant dev
  • kiểm tra Nant
  • Nant giai đoạn

Bạn có thể làm điều này bằng cách thêm một mục tiêu mà bộ biến môi trường. Ví dụ:

<target name="dev"> 
    <property name="environment" value="dev"/> 
    <call target="importProperties" cascade="false"/> 
</target> 

<target name="test"> 
    <property name="environment" value="test"/> 
    <call target="importProperties" cascade="false"/> 
</target> 

<target name="stage"> 
    <property name="environment" value="stage"/> 
    <call target="importProperties" cascade="false"/> 
</target> 

<target name="importProperties"> 
    <property name="propertiesFile" value="properties.${environment}.build"/> 
    <if test="${file::exists(propertiesFile)}"> 
    <include buildfile="${propertiesFile}"/> 
    </if> 
    <if test="${not file::exists(propertiesFile)}"> 
    <fail message="Properties file ${propertiesFile} could not be found."/> 
    </if> 
</target> 
Các vấn đề liên quan