2015-06-26 22 views
8

Tôi thừa nhận tôi khá mới để gradle nhưng tôi đã không mong đợi để không thể hiểu một cái gì đó đơn giản như ví dụ dưới đây. Tôi có thể đọc tài liệu gradle về kiểm tra xem một thuộc tính dự án đã được thiết lập hay không bằng cách sử dụng một cuộc gọi hasProperty (String propertyName) và tôi đang ngồi ở đây và không có ý tưởng tại sao một cái gì đó cơ bản không hoạt động.Chuyển các thuộc tính sang một gradle xây dựng

Tôi tin rằng tâm trí của tôi phải là quá nhiều "kiến như" định hướng rằng chắc chắn tôi đang thiếu một cái gì đó bình thường cơ bản

task printSystem() << { 
    println system 
    println "has property: " + hasProperty("system") 
} 

và gọi nhiệm vụ đó với các lệnh dưới đây:

$gradle printSystem -Psystem=mySystem 
mySystem 
has property: null 

Vì vậy, câu hỏi của tôi sẽ là:

  1. Tại sao hệ thống được in nhưng hasProperty trả về null?
  2. Tôi nên kiểm tra sự tồn tại của thuộc tính dự án được gọi là "hệ thống" như thế nào?
  3. Có cách nào khác để kiểm tra thuộc tính dự án chứ không phải thuộc tính hệ thống không?
  4. Làm cách nào bạn chuyển thuộc tính hệ thống từ dòng lệnh?

Đây là từ, tài liệu gradle và tôi tin rằng tôi đang đọc nó ngay

19.2.1. Kiểm tra các thuộc tính của dự án

Bạn có thể truy cập thuộc tính dự án trong tập lệnh xây dựng của mình đơn giản bằng cách sử dụng tên của nó khi bạn sử dụng biến. Nếu thuộc tính này không tồn tại, một ngoại lệ sẽ được ném và quá trình xây dựng sẽ không thành công. Nếu kịch bản xây dựng của bạn dựa vào các thuộc tính tùy chọn mà người dùng có thể đặt, có thể trong tệp gradle.properties, bạn cần phải kiểm tra sự tồn tại trước khi bạn truy cập chúng. Bạn có thể làm điều này bằng cách sử dụng phương thức hasProperty ('propertyName') trả về true hoặc false.

+0

Bạn đã thấy câu trả lời của tôi không? Liệu nó giải quyết vấn đề anh ta? Nếu có, hãy chấp nhận nó. – Opal

+0

Câu trả lời của bạn đã đến vào chiều thứ Sáu khi tôi đang thưởng thức đồ uống cuối tuần với các đồng nghiệp văn phòng của tôi :-) Tôi đã thử nghiệm giải pháp của bạn hôm nay và nó đã hoạt động. Tôi ước tài liệu sẽ rõ ràng hơn chỉ bằng cách đặt 'dự án.hasProperty ('propertyName') 'trái ngược với những gì nó hiển thị bây giờ. Ngoài ra khi một cái gì đó là nghĩa vụ phải trả lại đúng hay sai và trả về một null thay vì thêm vào sự nhầm lẫn. Cảm ơn nhiều. – Julian

Trả lời

11

Bạn cần gọi rõ ràng hasProperty trên cá thể project - không có nó, hasProperty được gọi trên một số ngữ cảnh cục bộ. Ví dụ sau hoạt động:

task printSystem() << { 
    println system 
    println "has property: " + project.hasProperty("system") 
} 
  1. không tồn tại tài sản (system không được định nghĩa trong kịch bản) là lấy từ project dụ. Nếu bạn không vượt qua thuộc tính system, ngoại lệ sẽ được ném trên println.
  2. project.hasProperty('propName')
  3. Không chắc chắn nếu tôi hiểu đúng, nhưng bạn có thể truy cập tài sản dự án thông qua project dụ và hệ thống tính thông qua các lớp System.
  4. Sử dụng -D switch - gradle -Dprop=value
Các vấn đề liên quan