수색…


통사론

  • groovy.util.Node = node.find {childNode -> true를 반환 || 거짓}
  • node.append (nodeYouWantAsAChild)
  • groovy.util.Node parsedNode = (새 XmlParser ()). parseText (someRawXMLString)
  • '' '복수 라인 문자열 (보간되지 않음)' ''

비고

IntelliJ 프로젝트의 세 가지 기본 파일 - ipr, iws 및 iml 파일 -은 아이디어 작업의 gradle에서와 같이 액세스 할 수 있습니다.

project.ipr
module.iml
workspace.iws

.withXml을 사용하면 xml에 액세스 할 수 있습니다. .asNode ()를 사용하면 Groovy XML 노드로 바뀝니다.

전의:

project.ipr.withXml { provider ->
    def node = provider.asNode()

거기에서 꽤 간단합니다 - 당신을 위해 IntelliJ 프로젝트를 구성하기 위해 gradle을 수정하고, 시작하면서 파일을 가져 와서 (IntelliJ 내부에서) 취할 작업을 수행 한 다음 이전 파일로 새 파일을 비교하십시오. 아이디어 작업을 사용자 정의하는 데 필요한 XML을 확인해야합니다. 또한 xml이 어디에 있는지 메모 해 두어야합니다.

고려해야 할 또 하나의 고려 사항은 여러 번 gradle 아이디어를 실행하면 IntelliJ 파일 내에 중복 노드를 원하지 않는다는 것입니다. 따라서 만들고자하는 노드를 검색하고 거기에 없으면 만들고 삽입 할 수 있습니다.

함정 :

경우에 따라 find 메소드에서 문자열 비교에 ==를 사용하면 실패합니다. 테스트 할 때 나는 그것이 사실이라는 것을 안다. 나는 .contains를 사용한다.

노드를 검색 할 때 모든 노드가 기준으로 사용하는 속성을 가지고있는 것은 아니므로 null인지 확인하십시오.

기본 실행 구성 추가

이 예제의 가정 :

  • 클래스가 있습니다, foo.bar.Baz .
  • main 메소드를 실행하는 실행 구성을 만들고 싶습니다.
  • 그것은 fooBar 라는 모듈에 있습니다.

귀하의 gradle 파일 :

idea {    
    workspace.iws.withXml { provider ->
        // I'm not actually sure why this is necessary
        def node = provider.asNode()    

        def runManager = node.find { [email protected]('RunManager')}

        // find a run configuration if it' there already
        def runner = runManager.find { it.find ({ mainClass ->
            return mainClass.@name != null && mainClass.@name == "MAIN_CLASS_NAME" && mainClass.@value != null && [email protected]('Baz');
        }) != null }

        // create and append the run configuration if it doesn't already exists
        if (runManager != null && runner == null){
            def runnerText = '''
                <configuration default="false" name="Baz" type="Application" factoryName="Application" nameIsGenerated="true">
                  <extension name="coverage" enabled="false" merge="false" runner="idea">
                    <pattern>
                      <option name="PATTERN" value="foo.bar.Baz" />
                      <option name="ENABLED" value="true" />
                    </pattern>
                  </extension>
                  <option name="MAIN_CLASS_NAME" value="foo.bar.Baz" />
                  <option name="VM_PARAMETERS" value="" />
                  <option name="PROGRAM_PARAMETERS" value="" />
                  <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
                  <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
                  <option name="ALTERNATIVE_JRE_PATH" />
                  <option name="ENABLE_SWING_INSPECTOR" value="false" />
                  <option name="ENV_VARIABLES" />
                  <option name="PASS_PARENT_ENVS" value="true" />
                  <module name="foobar" />
                  <envs />
                  <method />
                </configuration>'''
            runner = (new XmlParser()).parseText(runnerText)
            runManager.append(config);
        }

        // If there is no active run configuration, set the newly made one to be it
        if (runManager != null && runManager.@selected == null) {
            runManager.@selected="${runner.@factoryName}.${runner.@name}"
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow