gradle
IntelliJ IDEA Task Anpassning
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}"
}
}
}