2012-01-27 27 views
21

Là một phần của tác vụ triển khai trong Gradle, tôi muốn thay đổi giá trị của thuộc tính trong foo.properties để trỏ đến cơ sở dữ liệu sản xuất thay vì cơ sở dữ liệu phát triển.Làm cách nào để chuyển đổi tệp .properties trong khi xây dựng Gradle?

Tôi không muốn thay thế toàn bộ tệp ngay vì nó khá lớn và có nghĩa là chúng tôi sẽ phải duy trì hai phiên bản riêng biệt chỉ khác nhau trên một dòng.

Cách tốt nhất để thực hiện việc này là gì?

Trả lời

28

Bạn có thể sử dụng các nhiệm vụ ant.propertyfile:

ant.propertyfile(
     file: "myfile.properties") { 
     entry(key: "propertyName", value: "propertyValue") 
     entry(key: "anotherProperty", operation: "del") 
    } 
3

Một giải pháp đơn giản là viết mã một tác vụ sử dụng java.util.Properties để ghi tệp. Nếu bạn thực sự muốn cập nhật dần tệp, bạn sẽ phải tự mình triển khai tệp này. Hoặc có thể bạn tìm thấy một nhiệm vụ Ant làm những gì bạn muốn (tất cả các nhiệm vụ Ant có thể được sử dụng như-là từ Gradle). Để có kết quả tốt nhất, bạn cũng nên khai báo các đầu vào và đầu ra của tác vụ, để Gradle chỉ thực hiện các tác vụ khi tệp thuộc tính cần được thay đổi.

+0

Bạn cũng có thể sử dụng thư viện cấu hình của Apache commons cung cấp API thuận tiện hơn (http://commons.apache.org/configuration/userguide/howto_filebased.html). Tất nhiên, bạn sẽ vẫn phải thực hiện hầu hết các logic của mình. – rodion

+0

Nhiệm vụ [PropertyFile] của Ant (http://ant.apache.org/manual/Tasks/propertyfile.html) đã làm chính xác những gì tôi cần. –

1

Tạo một thuộc tính đối tượng, sau đó tạo đối tượng tệp với đường dẫn tệp thuộc tính được nhắm mục tiêu, tải tệp trên đối tượng thuộc tính có tải, đặt thuộc tính mong muốn với setProperty và lưu thay đổi với lưu trữ.

def var = new Properties() 
File myfile = file("foo.properties"); 

var.load(myfile.newDataInputStream()) 
var.setProperty("db", "prod") 
var.store(myfile.newWriter(), null) 
+4

Vui lòng thêm một số tài liệu/giải thích. –

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