Скомпилируйте кодовую базу Java в 10 и 8 с Gradle - PullRequest
0 голосов
/ 13 февраля 2019

Хотя этот вопрос говорит мне, что действительно возможно скомпилировать более новые версии в более старые версии, используя --target и --source, а также более новые команды --release.Java 10 и Java 8 сильно отличаются по настройке;10 с использованием модулей, а 8 - нет.

Я попытался сделать это, добавив sourceCompatibility = 1.8 в свой build.gradle, и я получил ошибку modules are not supported in -source 8.Это, конечно, ожидаемо и имеет смысл.

Могу ли я сделать что-то подобное или сделать именно так, чтобы я мог ввести переменную в моей задаче сборки Gradle, чтобы "переключаться" между кодом компиляции Java 8 и Java 10

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Может быть, это будет вам полезно - с последним плагином Gradle Modules (начиная с версии 1.5.0 ) вы можете скомпилировать:

  • ваш основной код (кроме module-info.java) для Java 8,
  • ваш module-info.java, отдельно, для Java 9.

Это выполняется автоматически modularity.mixedJavaRelease метод.

Вот пример того, как применить плагин к основному build.gradle (при условии, что это многопроектная сборка):

plugins {
  // your remaining plugins here

  id 'org.javamodularity.moduleplugin' version '1.5.0' apply false
}

subprojects {
  // your remaining subproject configuration here

  apply plugin: 'org.javamodularity.moduleplugin'
  modularity.mixedJavaRelease 8 // sets "--release 8" for main code, and "--release 9" for "module-info.java"

  // test.moduleOptions.runOnClasspath = true // optional (if you want your tests to still run on classpath)
}
0 голосов
/ 13 февраля 2019

Оказывается, я могу.Я напечатал этот вопрос, а затем провел небольшое исследование.Единственное предостережение в том, что вы НЕ МОЖЕТЕ использовать какие-либо высокоуровневые дополнения Java.

Используя Gradle, я включил переменную в свой оператор run, аналогично этому gradle clean assemble -PjavaVer=8

Используя эту переменную, яв основном может отключить код, который я хотел бы запустить.См. Пример ниже.

if(project.hasProperty('javaVer') && javaVer == '8') {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}

afterEvaluate {
    repositories {
        mavenCentral()
        jcenter()
        flatDir {
            dirs 'lib'
        }
    }
    compileJava {
        if (project.hasProperty(('javaVer')) && javaVer == '8') {
            excludes = ['**/module-info.java']
        } else {
            doFirst {
                options.compilerArgs = [
                        '--module-path', classpath.asPath,
                ]
                classpath = files()
            }
        }
    }
}

Это обнаружит, установлена ​​ли переменная на 8, и если это так, исключая класс module-info.java, и установит sourceCompatibility и targetCompatibility на 1.8,Это сработало для меня.

Пожалуйста, имейте в виду, что вы НЕ МОЖЕТЕ делать этого, если используете специальный код Java 10 или 9, например, var для Java 10. Именно поэтому нам пришлось исключить класс module-info.java, поскольку он был представлен в Java 9.

Надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...