2011-08-18 51 views
7

Tôi đang rách tóc ra. Tôi đã xóa các kịch bản của mình ngay lập tức trở lại mã được cung cấp trong các trang hướng dẫn Gradle như tôi nghĩ rằng tôi đang làm điều gì đó về cơ bản sai hoặc đã hiểu lầm cách một ứng dụng đa dự án được cho là được cấu trúc bằng cách sử dụng gradle.Xây dựng dự án đa java bằng Gradle

Tôi có ba dự án java trong nhật thực, với cả ba dự án có chứa tập lệnh build.gradle và chỉ có một dự án chứa tập lệnh settings.gradle. Cấu trúc như sau:

Scripts 
-- build.gradle 
-- settings.gradle 
Database 
-- build.gradle 
Services 
-- build.gradle 

Tôi đang cố gắng để xây dựng 'Database' và dự án 'Dịch vụ' bằng cách sử dụng kịch bản xây dựng trong dự án 'Scripts'. Để tạo cây dự án, tôi có đoạn mã sau vào settings.gradle:

include 'Services', 'Database' 

project (':Services').projectDir = new File(settingsDir, "../Services") 
project (':Database').projectDir = new File(settingsDir, "../Database") 

Sao chép mã trong hướng dẫn đa dự án (tài liệu gradle), tôi đang cố gắng để có được mỗi việc xây dựng kịch bản để in ra một số văn bản, để đảm bảo mọi thứ được thiết lập chính xác. Mục tiêu cuối cùng của tôi là có các phụ thuộc được xây dựng một cách chính xác khi 'eclipseClasspath' được thực thi, sao cho tất cả các dự án biên dịch chính xác trong nhật thực. Tuy nhiên, văn bản không được in ra như tôi mong đợi!

Dưới đây là những gì được chứa trong ba xây dựng kịch bản:

Scripts build.gradle

allprojects { 
    task hello << { task -> println "I'm $task.project.name" } 
} 

subprojects { 
    hello << {println "- I depend on Scripts"} 
} 

Cơ sở dữ liệu build.gradle

hello.doLast { 
    println "- I'm inside database" 
} 

Dịch vụ build.gradle

hello.doLast { 
    println "- I'm inside services" 
} 

Trong dự án 'Scripts', khi tôi chạy 'gradle -q hello', tôi nhận được kết quả như sau:

I'm Scripts 
I'm AnprDatabase 
- I depend on Scripts 
I'm Database 
- I depend on Scripts 

Tại sao là nội dung '- Tôi bên trong cơ sở dữ liệu' và '-I'm bên trong dịch vụ 'không xuất hiện? Tôi hơi bối rối bởi nó. Tôi chỉ có thể phỏng đoán nó có cái gì đó để làm với cấu trúc dự án của tôi. Ai đó có thể xác nhận đây là trường hợp? Nếu không, vấn đề là gì? Như đã đề cập, tôi đã xóa các kịch bản của mình trở lại ví dụ đơn giản này, vì tôi không thể lấy các phụ thuộc để chạy trong mỗi dự án xây dựng kịch bản bằng cách sử dụng cùng một cấu trúc.

Rất cảm kích mọi trợ giúp được cung cấp.

+0

Làm việc tốt cho tôi, 'gradle-1.0-milestone-3' – axtavt

+0

Tôi đang sử dụng cùng một phiên bản của gradle. Ứng dụng của bạn có bao gồm các dự án java có cùng cấu trúc với tôi không? – ScreamingMage

+0

Một câu hỏi khác cho bạn axtavt, là kịch bản xây dựng của bạn đang được chạy từ bên trong dự án 'Kịch bản' tương đương của bạn hay là nó ở gốc của ba dự án? Tôi muốn thử và chạy thử nghiệm của tôi từ bên trong dự án 'Scripts' – ScreamingMage

Trả lời

4

Tôi đã tìm ra lý do tại sao nó không hoạt động. Đó là một lỗi ngớ ngẩn về phía tôi. Dự án 'Cơ sở dữ liệu' và 'Dịch vụ' không nằm trong cùng thư mục với dự án 'Kịch bản' của tôi. Tôi đã kiểm tra các dự án này vào một kho lưu trữ git, nó sao chép các thư mục cục bộ ra khỏi vùng làm việc Eclipse của tôi và tới kho lưu trữ git cục bộ. Tôi đã không kiểm tra dự án 'Scripts' vào kho git của mình để nó vẫn đang nằm trong vùng làm việc Eclipse của tôi. Có vẻ rất rõ ràng bây giờ là tại sao nó không hoạt động! Kiểm tra dự án 'Scripts' của tôi và thay đổi đường dẫn đến các dự án khác trong settings.gradle đã khắc phục được sự cố.

Thật thú vị là thay vì ném một FileNotFoundException hoặc một cái gì đó tương tự, Gradle sẽ tạo ra một dự án trống nếu nó không thể tìm thấy một trong những quy định. Đây là điều tôi chưa đánh giá cao. Lúc đầu, tôi nghĩ rằng đây là hành vi kỳ lạ, nhưng tôi cho rằng nó mang lại cho người dùng sức mạnh để tạo ra các dự án của mình khi đang chạy ở thời gian chạy tập lệnh. Không chắc chắn nếu tôi thích điều đó mặc dù!

Vì vậy, luôn đảm bảo điều hướng đến đúng thư mục trong cài đặt của bạn khi bao gồm dự án! Nếu không, bạn có thể phạm lỗi như tôi đã làm.

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