gradle
IntelliJ IDEA Personnalisation des tâches
Recherche…
Syntaxe
- groovy.util.Node = node.find {childNode -> return true || faux }
- node.append (nodeYouWantAsAChild)
- groovy.util.Node parsedNode = (nouveau XmlParser ()). parseText (someRawXMLString)
- '' 'chaîne de caractères multi-lignes (non interpolée)' ''
Remarques
Les trois fichiers de base d’un projet IntelliJ - les fichiers ipr, iws et iml - sont accessibles comme dans la tâche d’idée via
project.ipr
module.iml
workspace.iws
L'utilisation du fichier .withXml vous permet d'accéder au fichier XML. En utilisant le fichier .asNode (), il devient un nœud XML groovy.
Ex:
project.ipr.withXml { provider ->
def node = provider.asNode()
À partir de là, il est assez simple de modifier graduellement pour configurer les projets IntelliJ, de prendre le fichier au démarrage, d'effectuer les actions que vous souhaitez exécuter (dans IntelliJ), puis de modifier le nouveau fichier avec l'ancien fichier. Vous devriez voir quel XML vous aurez besoin pour personnaliser le travail d'idée. Vous devrez également prendre note de l'emplacement du fichier XML.
Une autre chose à prendre en compte est que vous ne voulez pas de doublons dans les fichiers IntelliJ si vous exécutez l'idée de dégradé plusieurs fois. Donc, vous voudrez rechercher le nœud que vous souhaitez créer et si ce n'est pas le cas, vous pouvez le créer et l'insérer.
Pièges:
Parfois, lorsqu’on utilise == pour la comparaison de chaînes dans la méthode find, cela échoue. En testant et je trouve que c'est le cas, j'utilise .contains.
Lors de la recherche de nœuds, tous les nœuds ne possèdent pas l'attribut que vous utilisez en tant que critère. Assurez-vous donc de vérifier la valeur null.
Ajouter une configuration d'exécution de base
Hypothèses pour cet exemple:
- Vous avez une classe,
foo.bar.Baz
. - Vous souhaitez créer une configuration d'exécution qui exécute la méthode principale.
- C'est dans un module appelé
fooBar
.
Dans votre dossier de classement:
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}"
}
}
}