2014-09-03 16 views
5

Tôi hiện đang mô đun hóa bản dựng lớp của chúng tôi để có tệp libs/commons.gradle chứa nhiều nội dung toàn cầu. Tôi cần điều này vì các nhánh khác nhau của phần mềm được phát triển song song và chúng tôi muốn tránh lây lan mọi thay đổi scriptfile trong tất cả các nhánh.Gradle: làm cách nào tôi có thể gọi 'def' từ tập lệnh được nhập?

Vì vậy, tôi tạo ra mà tập tin lib và sử dụng "áp dụng từ" để tải nó:

áp dụng từ: 'gradle/trơn/commons.gradle'

Bên commons.gradle tôi xác định các chức năng svnrevision:

...

def svnRevision = { 
    ISVNOptions options = SVNWCUtil.createDefaultOptions(true); 
    SVNClientManager clientManager = SVNClientManager.newInstance(options); 
    SVNStatusClient statusClient = clientManager.getStatusClient(); 
    SVNStatus status = statusClient.doStatus(projectDir, false); 
    SVNRevision revision = status.getCommittedRevision(); 
    return revision.getNumber().toString(); 
} 

...

tôi callin g hàm từ bao gồm build.gradle tôi:

...

task writeVersionProperties { 
    File f = new File(project.webAppDirName+'/WEB-INF/version.properties'); 
    if (f.exists()) { f.delete(); } 

    f = new File(project.webAppDirName+'/WEB-INF/version.properties'); 
    FileOutputStream os = new FileOutputStream(f); 
    os.write(("version="+svnRevision()).getBytes()); 
    os.flush(); 
    os.close(); 
} 

...

Nhưng tôi kết thúc trong:

...

FAILURE: Build failed with an exception. 

    * Where: 
    Build $PATH_TO/build20.gradle 

    * What went wrong: 
    A problem occurred evaluating root project 'DEV_7.X.X_GRADLEZATION'. 
    > Could not find method svnRevision() for arguments [] on root project 'DEV_7.X.X_GRADLEZATION'. 

...

Vì vậy, nhiệm vụ của tôi là: Làm cách nào tôi có thể gọi một hàm phụ ở chế độ gradle, được xác định trong tập lệnh được bao gồm?

Bất kỳ trợ giúp nào được đánh giá cao!

Trả lời

3

Từ http://www.gradle.org/docs/current/userguide/writing_build_scripts.html:

13.4.1. Biến cục bộ

Biến cục bộ được khai báo với từ khóa def. Chúng chỉ hiển thị trong phạm vi mà chúng đã được khai báo. Biến cục bộ là một tính năng của ngôn ngữ Groovy cơ bản.

13.4.2. Các thuộc tính bổ sung

Tất cả các đối tượng nâng cao trong mô hình miền của Gradle có thể chứa thêm thuộc tính do người dùng xác định. Điều này bao gồm, nhưng không giới hạn ở, dự án, nhiệm vụ và bộ nguồn. Các thuộc tính bổ sung có thể được thêm vào, đọc và được đặt qua thuộc tính ext của đối tượng sở hữu. Ngoài ra, một khối mở rộng có thể được sử dụng để thêm nhiều thuộc tính cùng một lúc.

Nếu bạn khai báo nó như là:

ext.svnRevision = { 
... 
} 

và không thay đổi cuộc gọi, tôi hy vọng nó sẽ làm việc.

+0

tính năng này phù hợp với tôi. cảm ơn rất nhiều! – gorefest

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