17

IntelliJに付属のJetGradleプラグインは、私のプロジェクトが競合していることを示しています。IDEの言語レベルが1.7で、Gradleの言語レベルが1.6であると表示されます。

次のコードは、すべてに対して1.7を出力します。

compileJava {
    println project.sourceCompatibility
    println project.targetCompatibility
    println sourceCompatibility
    println targetCompatibility
}

コマンドラインからGradleを実行すると正常に機能します。IDEA内で実行することも同様に機能します。これらは両方とも1.7JDKを使用しています。私のIDEAプロジェクトとモジュールも1.7を使用するように構成されています。

Gradleビルドスクリプトを介してプロジェクトをインポートすると、バージョンはデフォルトで1.6になります。1.7に変更しました。

この「Gradle言語レベル」とは何ですか?どうすれば変更できますか?

ありがとう!

4

4 に答える 4

9

GradleはツールAPIを介して言語レベルを公開しないため、これはintellijで定義されている「デフォルトのプロジェクト」言語にすぎないと思います。

このjetbrainsyoutrackチケットで、詳細を確認し、対応するgradleの問題に戻ることができます。

「修正方法」に関しては、jetgradleを使用せず、gradleideaプラグインを使用するのが唯一の現実的な選択肢だと思います。Intellij 12.1には大幅に改善されたjetgradleプラグインがありますが、情報がツールAPIにない場合、これを修正する方法を確認するのは困難です。

編集:Gradleは2.11用のRCを公開しました。これには(ついに!)この機能が含まれています。このサポートがツールAPI(つまり、intellij jetgradle)とgradleアイデアプラグインの両方にあることを説明する詳細については、リリースノートを参照してください。

于 2013-01-21T21:23:00.103 に答える
4

私はここでゲームに少し遅れていますが、これを使用して問題を解決します:

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()
        root.@'external.linked.project.id' = project.name
        root.@'external.linked.project.path' = '$MODULE_DIR$'
        root.@'external.root.project.path' = '$MODULE_DIR$'
        root.@'external.system.id' = "GRADLE"
        root.@'external.system.module.group' = project.group
        root.@'external.system.module.version' = project.version
      }
    }
  }
}

次に、を使用./gradlew ideaして、プロジェクト言語を1.8に設定するプロジェクトメタデータを生成します。編集:Gradleアイデアプラグインは、ディレクトリベース(.idea /)のメタデータではなく、ファイルベースのメタデータのみを処理します。これをディレクトリベースのメタデータを使用する既存のプロジェクトに適用する場合は、プロジェクトルートの.idea/フォルダーを吹き飛ばす必要があります。

注:jdkNameを「1.8」に設定すると、「1.8」という名前でIntellijに登録されたJavaSDKがあることを前提としています。

更新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およびGradleJDKLang Level

更新2:プロジェクトのロード時に、Intellijは「Gradleプロジェクトのインポート」を求めるプロンプトを表示します。何らかの理由で、これはiprファイルで構成された言語レベルを無視し、デフォルトで1.6になります。これを回避する方法は、Gradle統合を認識できるように、iprファイルと該当するimlファイルを事前に構成することです。このように、Gradleプロジェクトをインポートするように求められることはなく、言語レベルは1.8のままです。上記のコードブロックが更新され、必要な構成が含まれるようになりました。

于 2016-01-06T21:56:43.147 に答える
3

サポートされていないようですが、簡単な1回限りの修正です。

  • [ファイル]->[プロジェクト構造]に移動します。[モジュール]を選択します。
  • プロジェクト設定。(すでにあるはずです)「言語レベル」を7.0に変更します

あるいは

  • ファイル内の実際のコンパイルエラーにドリルダウンします。通常、これはcatchブロックで複数のエラーを処理するようなものです。
  • ポップアップ表示される赤いヘルパーアイコンを選択し、「言語レベルを1.7に設定」します
于 2014-04-06T16:30:27.260 に答える
1

java/kotlinプロジェクトがあります。いじり回した後、gradle.buildでプラグインを適用する順序は、モジュール自体またはメインソースセットに正しい言語レベルが指定されている場合に実際に影響を受けることがわかりました。

plugins {
    id 'org.jetbrains.kotlin.jvm' apply false
    id 'idea'
}
// have to apply in this order to fix idea.module.languageLevel
apply plugin: 'java'
apply plugin: 'org.jetbrains.kotlin.jvm'


sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

idea {
    module {
        jdkName = '1.8'
        languageLevel = new IdeaLanguageLevel("1.8")
    }
}
于 2021-03-24T19:43:56.760 に答える