2015-04-01 26 views
14

Tôi đang cố gắng xây dựng một dự án Cordova bằng cách sử dụng gradle như một công cụ xây dựng. Trong dự án Cordova, tôi có plugin của riêng tôi yêu cầu Java 1.7.Ghi đè phiên bản Java khi xây dựng một dự án Cordova với gradle

Trong build.gradle đi kèm với Cordova phiên bản java là 1.6. build.gradle:

android { 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_6 
     targetCompatibility JavaVersion.VERSION_1_6 
    } 
} 

Các build.gradle đi kèm với một cảnh báo lớn tuyệt vời mà nói nó là một tập tin được tạo ra mà không cần phải thay đổi nội dung, cách để tùy chỉnh xây dựng bước gradle là - như tôi hiểu - để tạo tệp build-extras.gradle.

tôi đã tạo ra một tập tin build-extras.gradle và thử như sau:

android { 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 
} 

Nhưng nó dường như không làm việc. Tôi vẫn gặp lỗi khi xây dựng dự án của mình.

Lỗi:

> strings in switch are not supported in -source 1.6 
>   switch (action) { 
>    ^ (use -source 7 or higher to enable strings in switch) 

Ai đó có thể xin hãy giúp tôi tìm ra cách để thiết lập gradle để làm công việc này?

Trả lời

14

Tôi đã cố gắng giải quyết cùng một vấn đề và đến đây với hy vọng tìm được câu trả lời! Dù sao, mặc dù không có câu trả lời, đề cập của bạn về build-extras.gradle đưa tôi đi đúng hướng, và sau đây bây giờ làm việc cho tôi ... vì vậy cảm ơn.

Để bắt đầu, tôi nghĩ tôi cũng có thể thử sử dụng cú pháp giống như bạn, để cố gắng tìm ra điều gì sai. Theo như tôi có thể nói nó không thành công vì tệp build-extras.gradle không được hợp nhất một cách kỳ diệu thành build.gradle, nhưng thay vào đó được tải và thực hiện bằng cách sử dụng phương pháp Gradle apply from. Và vì điều này xảy ra trước khi đóng cửa android quá sớm trong quá trình và các giá trị android ghi đè các giá trị 'bổ sung' của chúng tôi.

(Tôi không có thời gian để nghiên cứu kỹ hơn tôi cần phải vào Gradle hay Groovy, vì vậy xin lỗi nếu thuật ngữ của tôi là không chính xác ...)

Tuy nhiên, tôi có thể nhận được nó để làm việc nếu tôi sử dụng phương thức postBuildExtras().

Nếu bạn nhìn vào dưới cùng của tệp build.gradle được tạo bởi Cordova, bạn sẽ thấy rằng nếu phương thức như vậy (tức là postBuildExtras) tồn tại trên ext thì nó sẽ được gọi. Vì đây là điều cuối cùng trong kịch bản cấu hình sau đó tôi đoán điểm của phương pháp này là chúng ta có thể sử dụng nó để ghi đè lên bất cứ điều gì.

do đó tôi đã kết thúc với điều này như build-extras.gradle tôi:

ext.postBuildExtras = { 
    android { 
     compileOptions { 
      sourceCompatibility JavaVersion.VERSION_1_7 
      targetCompatibility JavaVersion.VERSION_1_7 
     } 
    } 
} 

Tôi thực sự có này làm việc khá sớm trong cuộc điều tra của tôi, nhưng giữ cố gắng cách tiếp cận khác kể từ khi tôi nghi ngờ kỹ thuật này sẽ thất bại khi chúng ta cố gắng có nhiều build-extras.gradle tập tin - mà, cho rằng cả hai chúng tôi đang nói chuyện cụ thể về các plugin Cordova, rất có thể.

Có một kỹ thuật trông đầy hứa hẹn cho plugin, sử dụng phần tử <framework> trong plugin.xml, nhưng với cách tiếp cận này, tôi không bao giờ có thể tải mô-đun plugin cụ thể.Tôi sẽ xem xét lại điều này khi tôi nhận được plugin # 2, nhưng bây giờ kỹ thuật được mô tả ở trên đã giúp tôi có một bước nhảy vọt lớn hơn vào nơi tôi sáng nay, vì vậy cảm ơn một lần nữa cho đầu mối build-extras.gradle. ;)

6

Về câu trả lời của Mark, tôi có giải pháp để thêm build-extras.gradle vào tệp plugin.xml. Vì vậy, nó sẽ được tự động thêm vào thư mục nền tảng đến đúng nơi.

<source-file src="src/android/lib/build-extras.gradle" target-dir="src/.." /> 
Các vấn đề liên quan