将自定义代码样式xml传递给gradle idea插件

时间:2014-09-29 20:24:09

标签: xml gradle intellij-13

有没有办法告诉gradle idea插件在生成项目文件时使用自定义代码样式xml?

我总是可以将xml复制到“〜/ Library / Preferences / IntelliJIdea13 / codestyles”中,然后在导入项目后更改代码样式,但我希望gradle插件能够自动执行此操作作为其生成的一部分

谢谢!

2 个答案:

答案 0 :(得分:3)

为了防止其他人试图这样做,我设法使用插件钩子来解决它,以便在将项目的ipr文件写入磁盘之前对其进行修改。基本上,将以下内容添加到build.gradle:

idea {
  project {
    ipr {
      withXml { provider -> addCodeStyle(provider) }
    }
  }
}

  def addCodeStyle(provider) {
      def project = provider.asNode()
      project.appendNode('component', [name: 'ProjectCodeStyleSettingsManager'])

      def codeStyleNode = findComponent(project, 'ProjectCodeStyleSettingsManager')
      codeStyleNode.appendNode('option', [name: 'USE_PER_PROJECT_SETTINGS', value: 'true'])
      def projectSettingsNode = codeStyleNode.appendNode('option', [name: 'PER_PROJECT_SETTINGS']).appendNode('value')    

      def codeStyleUrl = "fileUrl".toURL()

      //If you want to read from a file you could do new File(path).text
      def codeStyleXml = new XmlParser().parseText(codeStyleUrl.text)
      codeStyleXml.children().each { option ->
          projectSettingsNode.append(option)
      }
  }

这假设您的代码样式首选项的xml遵循以下格式:

<?xml version="1.0" encoding="UTF-8"?>
<code_scheme name="X">
  <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="6" />
  <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="9" />

我认为从IntelliJ导出首选项时的标准格式。

答案 1 :(得分:1)

根据IDEA 2016.2.5,我接受的答案对我不起作用。没有错误,但未应用代码样式(这是在更新注释中建议的代码之后)。 我最终使用了这个(使用基于文件夹的配置):

task copyCodeStyle(type: Copy) {
    from 'codeStyleSettings.xml'
    into '.idea'
}
tasks.idea.dependsOn copyCodeStyle

codeStyleSettings.xml看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectCodeStyleSettingsManager">
    <option name="PER_PROJECT_SETTINGS">
      <value>
        <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="8" />
        <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="300" />