gradle
IntelliJ IDEAタスクのカスタマイズ
サーチ…
構文
- groovy.util.Node = node.find {childNode - > trueを返す|| false}
- node.append(nodeYouWantAsAChild)
- groovy.util.Node parsedNode =(新しいXmlParser())。parseText(someRawXMLString)
- '' 'マルチライン文字列(補間されない)' ''
備考
IntelliJプロジェクトの3つの基本ファイル(ipr、iws、およびimlファイル)には、アイデアタスクのgradleでアクセスすることができます。
project.ipr
module.iml
workspace.iws
.withXmlを使用すると、xmlにアクセスできます。 .asNode()を使用すると、Groovy XMLノードになります。
例:
project.ipr.withXml { provider ->
def node = provider.asNode()
そこからかなり簡単です - あなたのためにIntelliJプロジェクトを構成するためにgradleを変更し、開始時にファイルを取り出し、(IntelliJ内で)gradleを実行したいアクションを実行し、古いファイルで新しいファイルを比較します。アイデアジョブをカスタマイズするために必要なXMLが表示されます。また、XMLのどこに位置しているのかをメモする必要があります。
考慮すべき点のもう1つは、グラデーションのアイデアを複数回実行すると、IntelliJファイル内にノードが重複しないようにすることです。したがって、作成するノードを検索したい場合は、そのノードを作成して挿入することができます。
落とし穴:
場合によっては、findメソッドの文字列比較に==を使用すると失敗します。テストすると私はそれが事実であるとわかります、私は.containsを使用します。
ノードを検索するときは、条件として使用している属性がすべてのノードにあるわけではありませんので、必ずnullを確認してください。
基本実行構成を追加する
この例の前提:
- あなたにはクラス
foo.bar.Baz
ます。 - メインメソッドを実行する実行構成を作成したいとします。
- これは
fooBar
というモジュール内にあります。
あなたのgradleファイル:
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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow