Szukaj…


Składnia

  • groovy.util.Node = node.find {childNode -> return true || fałszywy }
  • node.append (nodeYouWantAsAChild)
  • groovy.util.Node parsedNode = (new XmlParser ()). parseText (someRawXMLString)
  • 'Ciąg mutli-line (nie interpolowany)' '

Uwagi

Trzy podstawowe pliki projektu IntelliJ - pliki ipr, iws i iml - są dostępne jak w gradacji zadania pomysłu poprzez

project.ipr
module.iml
workspace.iws

użycie pliku .withXml umożliwia dostęp do pliku xml. Za pomocą .asNode () zamienia go w świetny węzeł xml.

Dawny:

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

Stamtąd jest to całkiem proste - zmodyfikować gradację, aby skonfigurować dla ciebie projekty IntelliJ, wziąć plik na początku, wykonać czynności, które chcesz podjąć grad (w IntelliJ), a następnie różnicować nowy plik ze starym plikiem. Powinieneś zobaczyć, jakiego kodu XML będziesz potrzebować, aby dostosować zadanie pomysłu. Musisz także zanotować miejsce w pliku XML, który się znajduje.

Inną rzeczą do rozważenia jest to, że nie chcesz duplikować węzłów w plikach IntelliJ, jeśli uruchomisz pomysł stopniowania wiele razy. Będziesz więc szukać węzła, który chcesz utworzyć, a jeśli go nie ma, możesz go utworzyć i wstawić.

Pułapki:

Czasami użycie == do porównania ciągów w metodzie find kończy się niepowodzeniem. Podczas testowania i stwierdzam, że tak jest, używam .contains.

Podczas wyszukiwania węzłów nie wszystkie węzły mają atrybut, którego używasz jako kryterium, więc sprawdź, czy nie ma wartości null.

Dodaj podstawową konfigurację uruchamiania

Założenia dla tego przykładu:

  • Masz klasę, foo.bar.Baz .
  • Chcesz utworzyć konfigurację uruchamiania, która uruchamia główną metodę.
  • Jest w module o nazwie fooBar .

W pliku oceny:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow