gradle
Настройка IntelliJ IDEA
Поиск…
Синтаксис
- groovy.util.Node = node.find {childNode -> return true || ложный }
- node.append (nodeYouWantAsAChild)
- groovy.util.Node parsedNode = (новый XmlParser ()). parseText (someRawXMLString)
- '' 'mutli-строка (не интерполированная)' ''
замечания
Три основных файла проекта IntelliJ - файлы ipr, iws и iml - могут быть доступны, как в градиенте в идее, через
project.ipr
module.iml
workspace.iws
использование .withXml позволяет вам получить доступ к xml. Использование .asNode (), которое превращает его в массивный узел xml.
Пример:
project.ipr.withXml { provider ->
def node = provider.asNode()
Оттуда это довольно просто - изменить град, чтобы настроить проекты IntelliJ для вас, взять файл по мере его запуска, выполнить действия, которые вы хотите сделать градиентом (внутри IntelliJ), а затем разбить новый файл на старый файл. Вы должны увидеть, какой XML вам понадобится, чтобы настроить идею. Вам также необходимо принять во внимание, где находится xml, в котором он находится.
Еще одна вещь, которую следует учитывать, заключается в том, что вы не хотите дублировать узлы в файлах IntelliJ, если несколько раз запускаете идею gradle. Таким образом, вы захотите найти узел, который хотите сделать, и если его там нет, вы можете его создать и вставить.
Ловушки:
Иногда при использовании == для сравнения строк в методе 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}"
}
}
}