IdeaModule

API 文件IdeaModule

啟用微調 IDEA 外掛的模組詳細資訊 (*.iml 檔案)。

混合使用大多數可能屬性的範例。通常您不必直接設定此模型,因為 Gradle 會為您設定。

plugins {
    id 'java'
    id 'idea'
}

//for the sake of this example, let's introduce a 'performanceTestCompile' configuration
configurations {
  performanceTestCompile
  performanceTestCompile.extendsFrom(testCompile)
}

dependencies {
  //performanceTestCompile "some.interesting:dependency:1.0"
}

idea {

  //if you want parts of paths in resulting files (*.iml, etc.) to be replaced by variables (Files)
  pathVariables GRADLE_HOME: file('~/cool-software/gradle')

  module {
    //if for some reason you want to add an extra sourceDirs
    sourceDirs += file('some-extra-source-folder')

    //and some extra test source dirs
    testSources.from(file('some-extra-test-dir'))

    //and some extra resource dirs
    resourceDirs += file('some-extra-resource-dir')

    //and some extra test resource dirs
    testResources.from(file('some-extra-test-resource-dir'))

    //and hint to mark some of existing source dirs as generated sources
    generatedSourceDirs += file('some-extra-source-folder')

    //and some extra dirs that should be excluded by IDEA
    excludeDirs += file('some-extra-exclude-dir')

    //if you don't like the name Gradle has chosen
    name = 'some-better-name'

    //if you prefer different output folders
    inheritOutputDirs = false
    outputDir = file('muchBetterOutputDir')
    testOutputDir = file('muchBetterTestOutputDir')

    //if you prefer different SDK than the one inherited from IDEA project
    jdkName = '1.6'

    //put our custom test dependencies onto IDEA's TEST scope
    scopes.TEST.plus += [ configurations.performanceTestCompile ]

    //if 'content root' (as IDEA calls it) of the module is different
    contentRoot = file('my-module-content-root')

    //if you love browsing Javadoc
    downloadJavadoc = true

    //and hate reading sources :)
    downloadSources = false
  }
}

為了處理邊緣案例,使用者可以對產生的 XML 檔案執行進階設定。也可以透過 beforeMerged 和 whenMerged 閉包來影響 IDEA 外掛合併現有設定的方式。

beforeMerged 和 whenMerged 閉包接收 Module 參數

進階設定範例

plugins {
    id 'java'
    id 'idea'
}

idea {
  module {
    iml {
      //if you like to keep *.iml in a secret folder
      generateTo = file('secret-modules-folder')

      //if you want to mess with the resulting XML in whatever way you fancy
      withXml {
        def node = it.asNode()
        node.appendNode('iLoveGradle', 'true')
        node.appendNode('butAlso', 'I find increasing pleasure tinkering with output *.iml contents. Yeah!!!')
      }

      //closure executed after *.iml content is loaded from existing file
      //but before gradle build information is merged
      beforeMerged { module ->
        //if you want skip merging exclude dirs
        module.excludeFolders.clear()
      }

      //closure executed after *.iml content is loaded from existing file
      //and after gradle build information is merged
      whenMerged { module ->
        //you can tinker with Module
      }
    }
  }
}

屬性

屬性說明
contentRoot

模組的內容根目錄。

downloadJavadoc

是否下載並新增與依賴 JAR 相關聯的 Javadoc。預設為 false。

downloadSources

是否下載並新增與依賴 JAR 相關聯的原始碼。預設為 true。

excludeDirs

要排除的目錄。

generatedSourceDirs

包含產生來源的目錄(生產和測試來源)。

iml

請參閱 IdeaModule.iml(org.gradle.api.Action)

inheritOutputDirs

如果為 true,此模組的輸出目錄將位於專案的輸出目錄下方;否則,它們將設定為 IdeaModule.getOutputDir()IdeaModule.getTestOutputDir() 指定的目錄。

jdkName

用於此模組的 JDK。如果 null,則使用現有或預設 ipr XML (繼承) 的值。如果設定為 inherited,則使用專案 SDK。否則,此模組使用對應 Java 版本的 SDK。

languageLevel

用於此模組的模組特定語言等級。當 null 時,模組將繼承 IDEA 專案的語言等級。

name

設定模組名稱,即 *.iml 檔案的名稱。

outputDir

生產類別的輸出目錄。如果 null,則不會建立任何項目。

outputFile

設定輸出 *.iml 檔案。它是選用的,因為任務應該為您正確設定它(包括確保它在多模組建置中是唯一的)。如果您真的需要變更輸出檔名(或模組名稱),透過moduleName屬性來執行會容易得多!

resourceDirs

包含資源的目錄。

scopes

此映射的鍵是 IDEA 範圍。每個鍵指向另一個具有兩個鍵(plus 和 minus)的映射。這些鍵的值是 Configuration 物件的集合。加上配置的檔案會被新增,減去減去配置的檔案。請參閱以下範例...

sourceDirs

包含生產來源的目錄。例如,請參閱 IdeaModule 的文件

targetBytecodeVersion

用於此模組的模組特定位元組碼版本。當 null 時,模組將繼承 IDEA 專案的位元組碼版本。

testOutputDir

測試類別的輸出目錄。如果 null,則不會建立任何項目。

testResourceDirs
已過時

包含測試資源的目錄。

testResources

測試資源目錄的完整且最新的集合。這應該優先於 IdeaModule.getTestResourceDirs(),因為它將包含預設目錄的後期變更。

testSourceDirs
已過時

包含測試來源的目錄。請注意,預設測試目錄的後期變更可能不會反映在此集合中,並且應優先使用 IdeaModule.getTestSources() 例如,請參閱 IdeaModule 的文件 此欄位已 @Deprecated,請改用 IdeaModule.getTestSources()

testSources

測試來源目錄的完整且最新的集合。這應該優先於 IdeaModule.getTestSourceDirs(),因為它將包含預設目錄的後期變更。

方法

方法說明
iml(action)

啟用進階設定,例如修改輸出 XML 或影響現有 *.iml 內容與 Gradle 建置資訊合併的方式。

Script 區塊

區塊說明
iml

啟用進階設定,例如修改輸出 XML 或影響現有 *.iml 內容與 Gradle 建置資訊合併的方式。

屬性詳細資訊

File contentRoot

模組的內容根目錄。

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
project.projectDir

boolean downloadJavadoc

是否下載並新增與依賴 JAR 相關聯的 Javadoc。預設為 false。

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
false

boolean downloadSources

是否下載並新增與依賴 JAR 相關聯的原始碼。預設為 true。

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
true

Set<File> excludeDirs

要排除的目錄。

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
[project.layout.buildDirectory, project.file('.gradle')]

Set<File> generatedSourceDirs

包含產生來源的目錄(生產和測試來源)。

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
[]

Boolean inheritOutputDirs

如果為 true,此模組的輸出目錄將位於專案的輸出目錄下方;否則,它們將設定為 IdeaModule.getOutputDir()IdeaModule.getTestOutputDir() 指定的目錄。

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
null
使用 ideajava 外掛的預設值
null

String jdkName

用於此模組的 JDK。如果 null,則使用現有或預設 ipr XML (繼承) 的值。如果設定為 inherited,則使用專案 SDK。否則,此模組使用對應 Java 版本的 SDK。

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
'inherited'

IdeaLanguageLevel languageLevel

用於此模組的模組特定語言等級。當 null 時,模組將繼承 IDEA 專案的語言等級。

Idea 模組語言等級基於關聯 Gradle 專案的 sourceCompatibility 設定。

使用 ideajava 外掛的預設值
project.sourceCompatibility

String name

設定模組名稱,即 *.iml 檔案的名稱。

它是選用的,因為任務應該為您正確設定它。預設情況下,它會嘗試使用 project.name 或在前面加上 project.path 的一部分,以確保模組名稱在多模組建置的範圍內是唯一的。模組名稱的「唯一性」是正確匯入 IDEA 所必需的,並且任務將確保名稱是唯一的。

since 1.0-milestone-2

如果您的專案在唯一名稱方面遇到問題,建議始終從根目錄執行 gradle idea,即針對所有子專案。如果您僅針對單個子專案執行 IDEA 模組的產生,則可能會得到不同的結果,因為唯一名稱是根據特定建置執行中涉及的 IDEA 模組計算的。

如果您更新模組名稱,請確保從根目錄執行 gradle idea,例如針對所有子專案,包括 IDEA 專案的產生。原因是可能存在依賴於已修改模組名稱的子專案。因此,您也希望產生它們,因為模組依賴項需要參考已修改的專案名稱。基本上,對於非簡單專案,建議始終從根目錄執行 gradle idea

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
${project.name}(有時在前面加上 ${project.path} 的部分以保證唯一性)

File outputDir

生產類別的輸出目錄。如果 null,則不會建立任何項目。

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
null
使用 ideajava 外掛的預設值
null

File outputFile

設定輸出 *.iml 檔案。它是選用的,因為任務應該為您正確設定它(包括確保它在多模組建置中是唯一的)。如果您真的需要變更輸出檔名(或模組名稱),透過moduleName屬性來執行會容易得多!

請參閱有關 moduleName 屬性的文件。在 IntelliJ IDEA 中,模組名稱與 *.iml 檔案的名稱相同。

使用 idea 外掛的預設值
#name + '.iml'

Set<File> resourceDirs

包含資源的目錄。

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
[]
使用 ideajava 外掛的預設值
來自 project.sourceSets.main.resources 的資源目錄

此映射的鍵是 IDEA 範圍。每個鍵指向另一個具有兩個鍵(plus 和 minus)的映射。這些鍵的值是 Configuration 物件的集合。加上配置的檔案會被新增,減去減去配置的檔案。請參閱以下範例...

如何使用 scopes 屬性在輸出 *.iml 檔案中啟用 'performanceTestCompile' 依賴項的範例

plugins {
    id 'java'
    id 'idea'
}

configurations {
  performanceTestCompile
  performanceTestCompile.extendsFrom(testCompile)
}

dependencies {
  //performanceTestCompile "some.interesting:dependency:1.0"
}

idea {
  module {
    scopes.TEST.plus += [ configurations.performanceTestCompile ]
  }
}
使用 idea 外掛的預設值
[:]
使用 ideajava 外掛的預設值
  • COMPILE -> project.configurations.compileClasspath
  • RUNTIME -> project.configurations.runtimeClasspath - project.configurations.compileClasspath
  • TEST -> project.configurations.testRuntimeClasspath - project.configurations.runtimeClasspath
  • PROVIDED

Set<File> sourceDirs

包含生產來源的目錄。例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
[]
使用 ideajava 外掛的預設值
project.sourceSets.main.allJava

JavaVersion targetBytecodeVersion

用於此模組的模組特定位元組碼版本。當 null 時,模組將繼承 IDEA 專案的位元組碼版本。

Idea 模組位元組碼版本基於關聯 Gradle 專案的 targetCompatibility 設定。

使用 ideajava 外掛的預設值
project.targetCompatibility

File testOutputDir

測試類別的輸出目錄。如果 null,則不會建立任何項目。

例如,請參閱 IdeaModule 的文件

使用 idea 外掛的預設值
null
使用 ideajava 外掛的預設值
null

Set<File> testResourceDirs

注意:此屬性已過時,將在 Gradle 的下一個主要版本中移除。

包含測試資源的目錄。

例如,請參閱 IdeaModule 的文件 此欄位已 @Deprecated,請改用 IdeaModule.getTestResources()

使用 idea 外掛的預設值
[]
使用 ideajava 外掛的預設值
來自 project.sourceSets.test.resources 的資源目錄

ConfigurableFileCollection testResources (唯讀)

測試資源目錄的完整且最新的集合。這應該優先於 IdeaModule.getTestResourceDirs(),因為它將包含預設目錄的後期變更。

使用 idea 外掛的預設值
[]
使用 ideajava 外掛的預設值
基於可用測試套件中的資源

Set<File> testSourceDirs

注意:此屬性已過時,將在 Gradle 的下一個主要版本中移除。

包含測試來源的目錄。請注意,預設測試目錄的後期變更可能不會反映在此集合中,並且應優先使用 IdeaModule.getTestSources() 例如,請參閱 IdeaModule 的文件 此欄位已 @Deprecated,請改用 IdeaModule.getTestSources()

使用 idea 外掛的預設值
[]
使用 ideajava 外掛的預設值
project.sourceSets.test.allJava

ConfigurableFileCollection testSources (唯讀)

測試來源目錄的完整且最新的集合。這應該優先於 IdeaModule.getTestSourceDirs(),因為它將包含預設目錄的後期變更。

使用 idea 外掛的預設值
[]
使用 ideajava 外掛的預設值
基於可用測試套件中的來源目錄

方法詳細資訊

void iml(Action<? super IdeaModuleIml> action)

啟用進階設定,例如修改輸出 XML 或影響現有 *.iml 內容與 Gradle 建置資訊合併的方式。

例如,請參閱 IdeaModule 的文件。

Script 區塊詳細資訊

iml { }

啟用進階設定,例如修改輸出 XML 或影響現有 *.iml 內容與 Gradle 建置資訊合併的方式。

例如,請參閱 IdeaModule 的文件。

委派至
IdeaModuleIml 來自 iml