Sök…


Syntax

  • groovy.util.Node = node.find {childNode -> return true || falsk}
  • node.append (nodeYouWantAsAChild)
  • groovy.util.Node parsedNode = (new XmlParser ()). parseText (someRawXMLString)
  • '' 'mutli-line string (inte interpolerad)' ''

Anmärkningar

De tre grundfilerna för ett IntelliJ-projekt - ipr-, iws- och iml-filerna kan nås som i grad i idéuppgiften genom

project.ipr
module.iml
workspace.iws

med .withXml kan du komma åt xml. Med hjälp av .asNode () på det förvandlas den till en groovy xml-nod.

Ex:

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

Därifrån är det ganska enkelt - att ändra gradle för att konfigurera IntelliJ-projekt för dig, ta filen när den startar, utför de åtgärder du vill att gradle ska göra (inuti IntelliJ) och sedan diffra den nya filen med den gamla filen. Du bör se vilken XML du behöver för att anpassa idéjobbet. Du måste också notera var i xml den finns.

En annan sak att tänka på är att du inte vill ha duplicerade noder i IntelliJ-filerna om du kör gradle-idén flera gånger. Så du vill söka efter den nod du vill skapa och om den inte finns där kan du skapa och infoga den.

fallgropar:

Ibland, när man använder == för strängjämförelse i sökmetoden, misslyckas det. När jag testar och jag tycker att det är fallet använder jag .container.

När du söker efter noder har inte alla noder attributet som du använder som kriterier, så se till att det är noll.

Lägg till en grundläggande körkonfiguration

Antaganden för detta exempel:

  • Du har en klass, foo.bar.Baz .
  • Du vill skapa en körkonfiguration som kör huvudmetoden.
  • Det är i en modul som heter fooBar .

I din gradfil:

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow