Поскольку я вижу, что вы делаете это из файла сборки gradle, сначала обратите внимание на фазы выполнения gradle.
Я бы предположил, что вы хотите, чтобы ваш код запускался при выполнении задачи, а не при загрузке файла сборки.Если это так, вам нужно поместить код в блок doFirst
или doLast
внутри задачи.Если вы напишите свой код, как в вашем вопросе, код будет выполняться при загрузке файла сборки, независимо от того, запущена ли задача generatepublicxml
или нет (т. Е. Вы можете запустить какую-то совершенно другую задачу, и код все равно будет выполняться).
Это часто не очевидно при запуске с gradle, и я бы порекомендовал прочитать документы gradle по жизненному циклу сборки , если это не совсем понятно.
С учетом этого, следующий build.gradle:
import groovy.xml.*
task generatepublicxml {
doLast {
file("public.xml").withWriter { writer ->
// Create MarkupBuilder with 4 space indent
def xml = new MarkupBuilder(new IndentPrinter(writer, " ", true))
xml.doubleQuotes = true
xml.mkp.xmlDeclaration(version: '1.0', encoding: 'utf-8')
xml.resources('xmlns:tools': 'http://schemas.android.com/tools', 'tools:ignore': 'ResourceName') {
string(name: 'remoteAccessConsumerKey', '3MVG92mNMNiWvonjPDM9qqaDip0MFl9TGc')
string(name: 'oauthRedirectURI', 'saleschap:///mobilesdk/detect/oauth/done')
'string-array'(name: 'oauthScopes') {
item('api')
item('web')
item('refresh_token')
}
string(name: 'androidPushNotificationClientId')
// Leave file comment
mkp.yield('\n ')
mkp.comment("AUTO-GENERATED FILE. DO NOT MODIFY. public.xml is generated by the generatepublicxml gradle task")
}
}
}
}
при запуске:
~> gradle generatepublicxml
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
приводит к следующему public.xml
:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="ResourceName">
<string name="remoteAccessConsumerKey">3MVG92mNMNiWvonjPDM9qqaDip0MFl9TGc</string>
<string name="oauthRedirectURI">saleschap:///mobilesdk/detect/oauth/done</string>
<string-array name="oauthScopes">
<item>api</item>
<item>web</item>
<item>refresh_token</item>
</string-array>
<string name="androidPushNotificationClientId" />
<!-- AUTO-GENERATED FILE. DO NOT MODIFY. public.xml is generated by the generatepublicxml gradle task -->
</resources>
Если вам не нужен атрибут xmlns
и т. Д. Для элемента resources
, вы можете просто сделать:
xml.resources {
...
}
, что приведет к:
<?xml version="1.0" encoding="utf-8"?>
<resources>
...