jer*_*nja 3 command-line-interface jboss7.x wildfly wildfly-8
我通过Wildfly Maven插件测试了在Wildfly(版本8.2.1)standalone.xml中添加系统属性的几种变体.基本上,如果系统属性不存在,它会添加一个系统属性,如果存在则更改其值.理想情况下,我想要一个批处理模式的CLI脚本,嵌套if-else.但问题是:
这是我的pom.xml中的插件部分
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>1.0.2.Final</version>
<executions>
<execution>
<id>addConfig</id>
<phase>install</phase>
<goals><goal>execute-commands</goal></goals>
<configuration>
<execute-commands>
<!-- <batch>true</batch> Issue #1. Not working in batch mode -->
<batch>false</batch> <!-- This works -->
<commands>
<command>if (outcome != success) of /system-property=app.env:read-resource</command>
<command>/system-property=app.env:add(value=local)</command>
<command>else</command>
<command>/system-property=app.env:remove</command>
<command>/system-property=app.env:add(value=local)</command>
<command>end-if</command>
</commands>
<!-- Issue #2. Nested if-else not working, even in non-batch mode -->
<!--
<batch>false</batch>
<commands>
<command>if (outcome != success) of /system-property=app.env:read-resource</command>
<command>/system-property=app.env:add(value=local)</command>
<command>else</command>
<command>if (result.value == qa) of /system-property=app.env:read-resource</command>
<command>/system-property=app.env:remove</command>
<command>/system-property=app.env:add(value=local)</command>
<command>else</command>
<command>/system-property=app.env:remove</command>
<command>/system-property=app.env:add(value=qa)</command>
<command>end-if</command>
<command>end-if</command>
</commands>
-->
<!-- Issue #3. Batch and nested if-else not working in CLI script. -->
<!--
<scripts>
<script>target/classes/scripts/add-config.cli</script>
</scripts>
-->
</execute-commands>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果处于批处理模式,这是例外:
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.wildfly.plugins:wildfly-maven-plugin:1.0.2.Final:execute-commands (addConfig)
on project jboss-config: Execution addConfig of goal org.wildfly.plugins:wildfly-maven-plugin:1.0.2.Final:execute-commands failed: Command 'if (outcome != success) of /system-property=app.env:read-resource' is invalid. The command is not allowed in a batch.
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution addConfig of goal org.wildfly.plugins:wildfly-maven-plugin:1.0.2.Final:execute-commands failed: Command 'if (outcome != success) of /system-property=app.env:read-resource' is invalid. The command is not allowed in a batch.
... 20 more
Caused by: java.lang.IllegalArgumentException: Command 'if (outcome != success) of /system-property=app.env:read-resource' is invalid. The command is not allowed in a batch.
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
... 21 more
Caused by: org.jboss.as.cli.operation.OperationFormatException: The command is not allowed in a batch.
... 24 more
Run Code Online (Sandbox Code Playgroud)
如果它有一个嵌套的if-else,非批处理,这是例外:
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.wildfly.plugins:wildfly-maven-plugin:1.0.2.Final:execute-commands (addConfig)
on project jboss-config: Execution addConfig of goal org.wildfly.plugins:wildfly-maven-plugin:1.0.2.Final:execute-commands failed: Command 'if (result.value == qa) of /system-property=app.env:read-resource' is invalid. if is not allowed while in batch mode.
...
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution addConfig of goal org.wildfly.plugins:wildfly-maven-plugin:1.0.2.Final:execute-commands failed: Command 'if (result.value == qa) of /system-property=app.env:read-resource' is invalid. if is not allowed while in batch mode.
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)
... 20 more
Caused by: java.lang.IllegalArgumentException: Command 'if (result.value == qa) of /system-property=app.env:read-resource' is invalid. if is not allowed while in batch mode.
at org.wildfly.plugin.cli.Commands.executeCommands(Commands.java:178)
... 21 more
Caused by: org.jboss.as.cli.CommandFormatException: if is not allowed while in batch mode.
at org.jboss.as.cli.handlers.ifelse.IfHandler.doHandle(IfHandler.java:130)
... 24 more
Run Code Online (Sandbox Code Playgroud)
为了完整性,这是我想要运行的脚本
batch
if (outcome != success) of /system-property=app.env:read-resource
/system-property=app.env:add(app.env=local)
else
if (result.value == qa) of /system-property=app.env:read-resource
/system-property=app.env:remove
/system-property=app.env:add(app.env=local)
else
/system-property=app.env:remove
/system-property=app.env:add(app.env=qa)
end-if
end-if
run-batch
Run Code Online (Sandbox Code Playgroud)
以及实际运行的内容:
if (outcome != success) of /system-property=app.env:read-resource
/system-property=app.env:add(value=local)
else
/system-property=app.env:remove
/system-property=app.env:add(value=local)
end-if
Run Code Online (Sandbox Code Playgroud)
问题是在批处理模式下不允许使用if-else流,因为if语句已经作为批处理执行.这也意味着不允许嵌套的if语句.
像下面这样的东西会起作用
if (outcome != success) of /system-property=app.env:read-resource
/system-property=app.env:add(value=local)
end-if
if (result.value == qa) of /system-property=app.env:read-resource
/system-property=app.env:remove
/system-property=app.env:add(value=local)
else
/system-property=app.env:remove
/system-property=app.env:add(value=qa)
end-if
Run Code Online (Sandbox Code Playgroud)
如果该属性丢失,将添加它,删除它然后重新添加它.这是让它工作的唯一方法,并不是一项昂贵的操作.
请注意,您发布的脚本有点偏差.添加系统属性时,value
将在add
操作中使用该属性.还有一个混合的test
和app.env
属性名称.
归档时间: |
|
查看次数: |
2521 次 |
最近记录: |