2015-01-15 12 views
7

Tôi đang cố sao chép 2 thư mục từ thư mục dự án của tôi vào trong bình. Khi tôi sử dụng sau các thiết lập Gradle bản sao các tập tin bên trong thư mục, không phải là thư mục themself:Tài nguyên bản sao tốt nghiệp, processResources

processResources { 
    from 'public' 
    from 'data' 
} 

Những gì tôi cần là phải có thư mục "projectDir/data" copyied vào "my.jar/dữ liệu".

Trả lời

3

Thông số copy trong bản sao Gradle nội dung của một thư mục nếu đường dẫn được chỉ định trong from là một thư mục.

Một giải pháp là chỉ định thư mục đích trong jar bằng cách sử dụng intodirective.

processResources { 
    from 'data' 
    from 'publicFolder' 
} 

task data(type: Copy) { 
    from 'data' into 'data' 
} 

task publicFolder(type: Copy) { 
    from 'public' into 'public' 
} 

Thao tác này sẽ đặt nội dung hoặc thư mục gốc vào thư mục có cùng tên trong bình. Nhưng như bạn có thể thấy, bạn sẽ cần lặp lại tên thư mục trong phạm vi đóng cửa into.

Cách giải quyết khác là có một thư mục mẹ cho các thư mục tài nguyên này và sử dụng thư mục mẹ này trong thông số copy.

Dưới đây là một cách để bạn có thể cấu trúc các thư mục tài nguyên:

<project-folder> 
| 
--> res 
    | 
    --> public 
    --> data 

Sau đó, trong copy spec của processResources, bạn có thể làm như sau:

processResources { 
    from 'res' 
} 

này sẽ tạo ra các thư mục publicdata trong tệp jar cuối cùng như bạn muốn.

+0

Có thể nói thư mục "sao chép từ 'projectRoot' và chỉ có thư mục 'dữ liệu' và 'công khai'"? –

+1

Sử dụng các bộ lọc cho tên thư mục bằng cách nào đó không hoạt động chính xác cho tôi. Tuy nhiên, tôi đã chỉnh sửa câu trả lời bằng giải pháp chính không liên quan đến việc sắp xếp lại các thư mục. Hy vọng rằng sẽ giúp. Tôi đồng ý rằng cách lý tưởng là nói _copy từ thư mục 'projectRoot' và chỉ bao gồm các thư mục mà tôi muốn_. Sẽ đăng một giải pháp cho rằng nếu tôi nhận được một. –

+0

Cảm ơn bạn đã giải pháp "từ vào". Đó là điều tôi đang tìm kiếm. Vấn đề là nó không làm việc cho tôi. Tôi nhận được lỗi "> Không thể tìm thấy phương thức công khai() cho các đối số [build_akni020h40dn3k7vwmwbm63ee $ _run_closure2_closure3 @ 4d266391] trên dự án gốc" –

3

Có một phương pháp 'từ' có đóng cửa bằng CopySpec.

Tôi khuyên bạn nên sử dụng tính năng này thay vì chia nhỏ thành các tác vụ riêng biệt hoặc tái cấu trúc bố cục của bạn.

processResources { 
    from('data') {into 'data'} 
    from('publicFolder') {into 'publicFolder'} 
} 
Các vấn đề liên quan