2012-01-09 97 views
8

Tôi cần thực thi từ Gradle một tập lệnh Ant dựa trên biến môi trường. Ant sử dụng <property environment="env"/> cho nó.Đặt biến môi trường từ Gradle

Tôi đã cố gắng làm env.foo="bar" ở Gradle, nhưng nó ném ngoại lệ Groovy.

Cách thích hợp để chuyển biến môi trường từ Gradle sang Ant là gì?

+0

Cậu cố gắng sử dụng xây dựng kịch bản Ant qua 'ant.importBuild 'build.xml''? –

+0

@Benjamin Đó là những gì tôi đang cố gắng hoàn thành. Thật không may kịch bản Ant cũ dựa trên một số biến môi trường. – Sergey

Trả lời

4

Nó là không thể để thiết lập biến môi trường từ Gradle hoặc JVM nói chung, nhưng nó có thể để lừa Ant như thế này:

ant.project.properties['env.foo'] = 'bar' 
+0

Tôi gặp lỗi: 'Không thể tìm thấy thuộc tính '' trên tác vụ '' –

9

Từ gradle 2.0 docs, tôi thấy một cái gì đó như thế này có thể

test { 
    environment "LD_LIBRARY_PATH", "lib" 
} 

Hoặc trong trường hợp này có thể sử dụng này

systemProperty "java.library.path", "lib" 
+3

Tôi ước tôi đã có Gradle 2.0 cách đây hai năm :) – Sergey

+1

Tôi đã thử điều này trong tệp build.gradle của mình (với tên biến khác). Sau đó, tôi kiểm tra biến hệ thống trong thử nghiệm của tôi như thế này: 'assertTrue (System.getenv(). ContainsKey (" SOME_TEST_VAR "));' Điều này đưa ra một lỗi xác nhận. Vì vậy, có vẻ như biến môi trường chưa được đặt. – user3791111

+0

Tôi gặp lỗi 'Không thể tìm thấy phương thức systemProperty() cho đối số' –

1

Accep ted giải pháp từ @Sergey:

ant.project.properties['env.foo'] = 'bar' 

Không làm việc cho tôi trên gradle 2,9 và ant 1.9.7. Điều đó không đưa ra bất kỳ lỗi nào, nhưng không làm gì cả. Thật vậy, nếu bạn đang nhìn vào mã nó implemented as:

public Hashtable<String, Object> getProperties() { 
    return PropertyHelper.getPropertyHelper(this).getProperties(); 
} 

nơi org.apache.tools.ant.PropertyHelper#getProperties is:

public Hashtable<String, Object> getProperties() { 
    //avoid concurrent modification: 
    synchronized (properties) { 
     return new Hashtable<String, Object>(properties); 
    } 
} 

Vì vậy, nó làm cho bản sao rõ ràng và nó không thể hoạt động được.

Cách làm điều đó một cách chính xác trong gradle file:

ant.project.setProperty('env.foo', 'bar') 

Documentation đề cập đến vài cách khác (lưu ý, không có dự án):

ant.buildDir = buildDir 
ant.properties.buildDir = buildDir 
ant.properties['buildDir'] = buildDir 
ant.property(name: 'buildDir', location: buildDir) 
Các vấn đề liên quan