2017-11-26 21 views
14

Sau khi nâng cấp lên Gradle 4.x, tôi get the warningThuộc tính CompileOptions.bootClasspath đã bị phản đối

Thuộc tính CompileOptions.bootClasspath đã bị phản đối và dự kiến ​​sẽ được loại bỏ trong Gradle 5.0. Vui lòng sử dụng thuộc tính CompileOptions.bootstrapClasspath thay thế.

trong một trong các dự án của tôi. Tôi không thấy bất kỳ thứ gì được gọi là bootClasspath hoặc tương tự trong số build.gradle của mình. Cảnh báo này có ý nghĩa gì?

cảnh báo chỉ xuất hiện trong commons tiểu dự án, không phải trong lõi.

commons/build.gradle:

apply plugin: 'com.android.library' 

ext { 
    PUBLISH_GROUP_ID = 'com.afollestad.material-dialogs' 
    PUBLISH_ARTIFACT_ID = 'commons' 
    PUBLISH_VERSION = '0.9.2.3' 
    BUILD_TOOLS = "26.0.3" 
    TARGET_SDK = 25 
} 

android { 
    compileSdkVersion TARGET_SDK 
    buildToolsVersion BUILD_TOOLS 

    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion TARGET_SDK 
     versionCode 1 
     versionName PUBLISH_VERSION 
    } 
    lintOptions { 
     checkReleaseBuilds false 
    } 
} 

dependencies { 
    implementation project(':core') 
} 

// Changes to this block must be applied in core/build.gradle and commons/build.gradle 
task("javadoc", type: Javadoc) { 
    description "Generates Javadoc API documentation for the main source code." 
    source = android.sourceSets.main.java.srcDirs 
    ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar" 
    classpath += files(ext.androidJar) 
    exclude "**/BuildConfig.java" 
    exclude "**/R.java" 
    options.links("http://docs.oracle.com/javase/7/docs/api/"); 
    options.links("http://d.android.com/reference/"); 
} 

lõi/build.gradle:

apply plugin: 'com.android.library' 

ext { 
    PUBLISH_GROUP_ID = 'com.afollestad.material-dialogs' 
    PUBLISH_ARTIFACT_ID = 'core' 
    PUBLISH_VERSION = '0.9.2.3' 
    SUPPORT_LIBRARY_VERSION = '25.4.0' 
    BUILD_TOOLS = "26.0.3" 
    TARGET_SDK = 25 
} 

android { 
    compileSdkVersion TARGET_SDK 
    buildToolsVersion BUILD_TOOLS 

    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion TARGET_SDK 
     versionCode 1 
     versionName PUBLISH_VERSION 
     consumerProguardFiles 'progress-proguard.txt' 
    } 
    lintOptions { 
     checkReleaseBuilds false 
    } 
} 

dependencies { 
    api "com.android.support:support-v13:$SUPPORT_LIBRARY_VERSION" 
    api "com.android.support:appcompat-v7:$SUPPORT_LIBRARY_VERSION" 
    api "com.android.support:recyclerview-v7:$SUPPORT_LIBRARY_VERSION" 
    api "com.android.support:support-annotations:$SUPPORT_LIBRARY_VERSION" 
    implementation "me.zhanghai.android.materialprogressbar:library:1.4.1" 
} 

// Changes to this block must be applied in core/build.gradle and commons/build.gradle 
task("javadoc", type: Javadoc) { 
    description "Generates Javadoc API documentation for the main source code." 
    source = android.sourceSets.main.java.srcDirs 
    ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar" 
    classpath += files(ext.androidJar) 
    exclude "**/BuildConfig.java" 
    exclude "**/R.java" 
    options.links("http://docs.oracle.com/javase/7/docs/api/"); 
    options.links("http://d.android.com/reference/"); 
} 

Trả lời

3

My Gradle là sử dụng OpenJDK 8 từ /usr/lib/jvm/java-8-openjdk-amd64/jre trên Ubuntu (xem bằng cách thêm println System.getProperty("java.home") trong build.gradle. Không Android Studio có liên quan.

tôi có thể kích hoạt các cảnh báo bằng cách thiết lập một cách rõ ràng sourceCompatibilitytargetCompatibility-1,7 (mặc định giá trị). Bằng cách thay đổi phiên bản Java để

android { 

    compileOptions { 
     sourceCompatibility 1.8 
     targetCompatibility 1.8 
    } 
} 

cảnh báo sẽ biến mất.

lý do tại sao các cảnh báo được hiển thị cho chỉ có một proj ect là nó không được lặp lại. commons được định cấu hình trước corealphanumerical ordering. Khi tôi đặt sourceCompatibilitytargetCompatibility thành 1.8 cho commons, cảnh báo sẽ di chuyển đến core.

Đặt sourceCompatibilitytargetCompatibility đến 1,8 cho tất cả các dự án sẽ xóa hoàn toàn cảnh báo. Nếu đây là những gì bạn muốn cho dự án của bạn và tại sao Gradle 4 không thể được sử dụng cảnh báo miễn phí với 1,7 là hai câu hỏi riêng biệt.

7

Tôi nghĩ rằng thông điệp này về Classpath java và cũ JDK, thêm này để gradle của bạn sẽ giải quyết nó:

android { 

    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 
} 

Bạn nên sử dụng java 9 JDK và gỡ cài đặt phiên bản cũ rồi đưa nó vào cấu trúc dự án của bạn : File ->Other settings ->Default project structure.

enter image description here

có thể kết luận:

Mặc định JDK for android-studio là ...\Android studio\jre (The nhúng JDK) như thể hiện trong hình trên. JDK được nhúng này có chứa bootClasspath không được chấp nhận.

Sử dụng JDK mới có chứa bootstrapClasspath hoặc sửa đổi compileOptions của bạn sẽ giải quyết.

Tại sao JDK cũ (Embedded one) không tương thích với phiên bản gradet mới?

Tôi không biết.

+0

Cảm ơn bạn đã chỉ cho tôi đúng hướng. Tôi đã viết một câu trả lời chi tiết hơn dựa trên các đề xuất của bạn mà bỏ ra bất kỳ giải pháp JDK 9, mà không phải là phù hợp trong môi trường của tôi. –

0

Những điều đã đề cập ở trên, tôi có thể cung cấp nơi xảy ra lỗi khi xây dựng Java. Tham chiếu: CompileOptions.bootClasspath phải trỏ đến một JAR thời gian chạy Java phù hợp với hệ thống đích dự định. Điều đó có nghĩa, ví dụ, nếu bạn đang biên soạn để chạy chương trình của bạn trên máy chủ sử dụng Java 6, bạn cần phải thiết lập các bootClasspath để trỏ vào một tương thích Java6 runtime, tức .: rt.jar

Tôi thường đặt -lên một biến biến dự án/môi trường để trỏ đến tập tin này:

  • BOOT_CLASSPATH

Nó thường sống với JRE, không phải trong JDK trừ dưới 012.thư mục.

Trong dự án Gradle kịch bản, chúng ta có:

[compileJava, compileTestJava, ]*.options*.bootClasspath = BOOT_CLASSPATH 

Đặt một cách rõ ràng. Tuy nhiên, trong một số tập lệnh khác, chúng tôi không đặt hoàn toàn là bootClasspath và vẫn có thông báo được đề cập.

The CompileOptions.bootClasspath property has been deprecated 
and is scheduled to be removed in Gradle 5.0. Please use the  
CompileOptions.bootstrapClasspath property instead. 

... anyway. Tôi do dự phỏng đoán rằng các plugin Java đang làm điều đó chính nó như là một số hành vi mặc định. Tôi nhận ra đó chỉ là câu chuyện nền. Tôi có thể hỗ trợ giải quyết cảnh báo.

CompileOptions.bootstrapClasspath`

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