gradle java9 Не удалось настроить таргетинг на платформу: "Java SE 9" с использованием цепочки инструментов: "JDK 8 (1.8)"

Я хочу использовать java9 в своем проекте gradle в кислородном затмении. Когда я бегу:

Run as> Gradle Test on  GreeterTest.java

со следующим кодом:

package hello.test;

import static org.junit.jupiter.api.Assertions.*;    
import org.junit.jupiter.api.Test;    
import hello.Greeter;

class GreeterTest {

    @Test
    void test() {
        Greeter greeter = new Greeter();
        assertEquals("Hello world", greeter.sayHello());
    }
}

и с классом я тестирую как:

package hello;

public class Greeter {
  public String sayHello() {
    return "Hello world!";
  }
}

Я получаю сообщение об ошибке

Не удалось настроить таргетинг на платформу: "Java SE 9" с использованием цепочки инструментов: "JDK 8 (1.8)".

Мой eclipse.init это

-startup ../Eclipse/plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar
--launcher.library /Users/stein/.p2/pool/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_\1.1.550.v20170928-1359
-product org.eclipse.epp.package.jee.product
-showsplash org.eclipse.epp.package.common
--launcher.defaultAction openFile
--launcher.a/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/jre/bin
-vmargs
-Dosgi.requiredJavaVersion=1.9
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Dosgi.requiredJavaVersion=1.9
-Xms256m
-Xmx1024m
--add-modules=ALL-SYSTEM
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Declipse.p2.max.threads=10
-Doomph.update.url=http://download.eclipse.org/oomph/updates/milestone/latest
-Doomph.redirection.index.redirection=index:/->http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/

Я добавил JAVA_HOME

Я добавил путь сборки

Я изменил параметр компиляции

Я установил параметр компиляции в Build.Gradle.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.2'
    }
}

repositories {
    mavenCentral()
}

ext.junit4Version        = '4.12'
ext.junitVintageVersion  = '4.12.2'
ext.junitPlatformVersion = '1.0.2'
ext.junitJupiterVersion  = '5.0.2'
ext.log4jVersion         = '2.9.0'

apply plugin: 'java'
apply plugin: 'eclipse'

apply plugin: 'org.junit.platform.gradle.plugin'

jar {
    baseName = 'junit5-gradle-consumer'
    version = '1.0.0-SNAPSHOT'
}

compileJava {
   sourceCompatibility = 9
   targetCompatibility = 9
}

compileTestJava {
    sourceCompatibility = 9
    targetCompatibility = 9
    options.compilerArgs += '-parameters'
}

junitPlatform {
    // platformVersion '1.0.2'
    filters {
        engines {
            // include 'junit-jupiter', 'junit-vintage'
            // exclude 'custom-engine'
        }
        tags {
            // include 'fast'
            exclude 'slow'
        }
        // includeClassNamePattern '.*Test'
    }
    // configurationParameter 'junit.jupiter.conditions.deactivate', '*'
    // enableStandardTestTask true
    // reportsDir file('build/test-results/junit-platform') // this is the default
    logManager 'org.apache.logging.log4j.jul.LogManager'
}

dependencies {
    // JUnit Jupiter API and TestEngine implementation
    testCompile("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")
    testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")

    // If you also want to support JUnit 3 and JUnit 4 tests
    testCompile("junit:junit:${junit4Version}")
    testRuntime("org.junit.vintage:junit-vintage-engine:${junitVintageVersion}")

    // To avoid compiler warnings about @API annotations in JUnit code
    //testCompileOnly('org.apiguardian:apiguardian-api:1.0.0')

    // To use Log4J's LogManager
    testRuntime("org.apache.logging.log4j:log4j-core:${log4jVersion}")
    testRuntime("org.apache.logging.log4j:log4j-jul:${log4jVersion}")

    // Only needed to run tests in an (IntelliJ) IDE(A) that bundles an older version
    testRuntime("org.junit.platform:junit-platform-   launcher:${junitPlatformVersion}")
}

task wrapper(type: Wrapper) {
    description = 'Generates gradlew[.bat] scripts'
    gradleVersion = '4.1'
}

Что я должен сделать, чтобы заставить это бежать?

4 ответа

Вы, вероятно, должны попытаться обновить свой JAVA_HOME в системных переменных и версии Java, используемой в затмении, чтобы быть последовательным

JAVA_HOME=/path/to/jdk9

В MacOSX что-то вроде:

JAVA_HOME = /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin

Я столкнулся с проблемой, потому что в IntelliJ Idea в разделе "Настройки"> "Инструменты сборки"> "Gradle" в разделе "Gradle" Gradlje JVM использовала неправильную версию Java. Поэтому я указываю использовать JAVA_HOME, и это решает проблему.

Я изменил java_home и модернизированный Gradle. Теперь это работает.

Из того, что я вижу, это проблема версии Gradle. ( Проблема совместимости Gradle и Java 9).

Вам нужно обновить обертку до 4.3.1, cli ref:

# upgrade Gradle to 4.3.1 
gradle wrapper --gradle-version 4.3.1 # not ./gradlew

Дай мне знать, если это работает.

Чтобы исправить эту проблему, я сделал это в моем импортированном проекте build.gradle в разделе compileJava. Я изменил sourceCompatibility и targetCompatibility на 8. У меня это работает. это происходит, когда вы импортируете проект из другого ресурса, который построен в другой версии.

В дополнение к другим способам, которые вы пробовали:

Gradle имеет установленную по умолчанию JVM в вашем %userprofile%/.gradle/gradle.properties. Это для меня находится в папке "C:\Users\j.gradle\gradle.properties":

org.gradle.java.home=C:/Program Files/AdoptOpenJDK/jdk-11.0.7.10-hotspot

Здесь вы также должны разместить свою новую JVM, чтобы убедиться, что gradle может компилировать новые проекты.

В Eclipse убедитесь, что у вас есть правильные настройки конфигурации сборки Gradle.

У меня была аналогичная проблема с eclipse, мне пришлось установить JAVA_HOME в свойствах -> Gradle.

Я столкнулся с той же ошибкой с другой версией JDK, поэтому я использовал следующий код, который отлично работает.

compileJava {
    options.fork = true
    options.forkOptions.javaHome = file('/Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk/Contents/Home')
    targetCompatibility = 11
    sourceCompatibility = 11
}

Для меня проблема заключалась в том, что я использовал

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_10
    targetCompatibility JavaVersion.VERSION_1_10
}

но проект был настроен для Java 1.8. Поэтому я изменил их на 1_8, и это работает.

Другие вопросы по тегам