【问题标题】:Pass custom code style xml to gradle idea plugin将自定义代码样式 xml 传递给 gradle idea 插件
【发布时间】:2014-11-24 08:06:11
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: xml gradle code-formatting intellij-13 idea-gradle-plugin


    【解决方案1】:

    以防万一其他人尝试这样做,我设法使用插件挂钩来解决它,以便在将项目的 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 导出首选项时,我认为这是标准格式。

    【讨论】:

    • 这似乎与此处显示的完全不一样。特别是No signature of method: org.gradle.plugins.ide.api.XmlFileContentMerger.addCodeStyle() is applicable for argument types: (org.gradle.internal.xml.XmlTransformer$XmlProviderImpl)。我试图找出问题所在,但我怀疑我的 gradle foo 太弱了。
    • 让它工作,提交了一个编辑,我必须做些什么才能让它工作。主要是需要定义findComponent(...),并且不得不欺骗gradle调用我的方法。
    【解决方案2】:

    已接受的答案不适用于 IDEA 2016.2.5。没有错误,但未应用代码样式(这是在按照 cmets 中的建议更新代码之后)。 我最终使用了这个(它适用于基于文件夹的配置):

    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" />
    

    【讨论】:

    • 此时,与直接将codeStyleSettings.xml 放入版本控制相比,您有什么收获?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2021-07-22
    相关资源
    最近更新 更多