Zoeken…


Syntaxis

  • groovy.util.Node = node.find {childNode -> return true || false}
  • node.append (nodeYouWantAsAChild)
  • groovy.util.Node parsedNode = (nieuwe XmlParser ()). parseText (someRawXMLString)
  • '' 'mutli-line string (niet geïnterpoleerd)' ''

Opmerkingen

De drie basisbestanden van een IntelliJ-project - de ipr-, iws- en iml-bestanden - kunnen worden benaderd als in de geleidelijke taak door

project.ipr
module.iml
workspace.iws

met de .withXml hebt u toegang tot de xml. Als u .asNode () gebruikt, wordt dit een groovy xml-knooppunt.

Ex:

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

Vanaf daar is het vrij eenvoudig - om gradle aan te passen om IntelliJ-projecten voor u te configureren, het bestand te nemen terwijl het begint, de acties uit te voeren die u wilt dat gradle (in IntelliJ) wordt uitgevoerd en vervolgens het nieuwe bestand met het oude bestand differen. Je zou moeten zien welke XML je nodig hebt om de ideeopdracht aan te passen. U moet ook noteren waar in de XML het zich bevindt.

Een ander ding om te overwegen is dat u geen dubbele knooppunten in de IntelliJ-bestanden wilt als u het gradle-idee meerdere keren uitvoert. Dus, je wilt zoeken naar het knooppunt dat je wilt maken en als het er niet is, kun je het maken en invoegen.

valkuilen:

Soms mislukt het wanneer u == gebruikt voor tekenreeksvergelijking in de zoekmethode. Bij het testen en ik vind dat het geval is, gebruik ik .contains.

Bij het zoeken naar knooppunten hebben niet alle knooppunten het kenmerk dat u gebruikt als criterium, dus let op null.

Voeg een Basic Run-configuratie toe

Veronderstellingen voor dit voorbeeld:

  • Je hebt een klas, foo.bar.Baz .
  • U wilt een runconfiguratie maken die de hoofdmethode uitvoert.
  • Het zit in een module genaamd fooBar .

In je gradle-bestand:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow