Как определяется уровень языка IntelliJ IDEA Gradle?
Плагин JetGradle, который поставляется с IntelliJ, показывает, что мой проект имеет конфликт. В нем говорится, что мой уровень языка IDE равен 1.7 и что мой уровень Gradle - 1.6.
Следующий код печатает 1.7 для всего:
compileJava {
println project.sourceCompatibility
println project.targetCompatibility
println sourceCompatibility
println targetCompatibility
}
Запуск Gradle из командной строки прекрасен. Запуск его внутри IDEA работает. Оба они используют 1.7 JDK. Мой проект IDEA и модуль также настроены на использование 1.7.
Когда я импортирую проект через Gradle build script, версия по умолчанию равна 1.6. Я изменил его на 1.7.
Что это за "Gradle уровень языка" и как его изменить?
Спасибо!
Ответы
Ответ 1
Gradle не раскрывает языковой уровень с помощью инструмента api, поэтому я бы подумал, что это просто язык проекта по умолчанию, как определено в intellij.
Вы можете увидеть подробности и вернуться к соответствующей проблеме gradle, в этом jetbrains youtrack ticket
Что касается "как исправить это", я думаю, что единственный реальный вариант - не использовать использование jetgradle и использовать Gradle плагин идей. Intellij 12.1 будет иметь значительно улучшенный плагин jetgradle, но если информация не находится на инструменте api, тогда трудно понять, как это можно исправить.
EDIT: gradle только что опубликовали RC для 2.11, который (наконец!) включает эту функцию, см. примечания к выпуску для подробностей что объясняет, что эта поддержка существует как для инструментария api (т.е. intellij jetgradle), так и для плагина идей gradle.
Ответ 2
Я немного опаздываю к игре здесь, но я использую это, чтобы решить проблему:
apply plugin: 'idea'
allprojects {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
idea {
project {
jdkName = sourceCompatibility
languageLevel = sourceCompatibility
ipr {
withXml {
def xml = """<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="\$PROJECT_DIR\$" />
<option name="gradleJvm" value="$sourceCompatibility" />
<option name="modules">
<set>
<option value="\$PROJECT_DIR\$" />
</set>
</option>
<option name="myModules">
<set>
<option value="\$PROJECT_DIR\$" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>"""
def node = it.asNode()
node.append(new XmlParser().parseText(xml))
}
}
}
module {
iml {
withXml {
def root = it.asNode()
[email protected]'external.linked.project.id' = project.name
[email protected]'external.linked.project.path' = '$MODULE_DIR$'
[email protected]'external.root.project.path' = '$MODULE_DIR$'
[email protected]'external.system.id' = "GRADLE"
[email protected]'external.system.module.group' = project.group
[email protected]'external.system.module.version' = project.version
}
}
}
}
Затем используйте ./gradlew idea
для генерации метаданных проекта, которые задают язык проекта 1,8. EDIT: плагин с идеей Gradle предназначен только для метаданных, основанных на файлах, а не на основе каталога (.idea/). Если вы примените это к существующему проекту, который использует метаданные на основе каталогов, вам нужно свернуть папку .idea/в корне проекта
Примечание: установка jdkName на "1.8" предполагает, что в Intellij есть Java SDK с именем "1.8".
ОБНОВЛЕНИЕ 1:
Созданный файл ipr содержит этот блок, указывающий использование Java 1.8 (обратите внимание на атрибуты 'languageLevel' и 'project-jdk-name')
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" assert-keyword="true" jdk-15="true" project-jdk-type="JavaSDK" assert-jdk-15="true" project-jdk-name="1.8">
<output url="file://$PROJECT_DIR$/out"/>
</component>
Это должно напрямую соответствовать тому, что вы видите в диалоговом окне "Структура проекта": ![Intellij и Gradle Уровень JDK Lang]()
ОБНОВЛЕНИЕ 2: При загрузке проекта Intellij предлагает вам "Импортировать Gradle Проект". По какой-то причине это игнорирует настроенный уровень языка в файле ipr и по умолчанию составляет 1,6. Способ обойти это - предварительно настроить ipr и соответствующие файлы iml, чтобы он знал об интеграции Gradle. Таким образом, вам не будет предложено импортировать проект Gradle, а уровень языка останется на уровне 1.8. Блок кода выше был обновлен, чтобы включить необходимую конфигурацию.
Ответ 3
Он, похоже, не поддерживается, но это простое одноразовое исправление.
- Перейдите к: Файл → Структура проекта Выберите "Модули" в разделе
- Настройки проекта. (должно быть уже) Изменить "Уровень языка" до 7.0
В качестве альтернативы
- Сверните и выполните ошибку компиляции в файле. Обычно это
что-то вроде обработки нескольких ошибок в блоке catch.
- Выберите
красный значок помощника, который появляется, и "установите уровень языка 1,7"