简体   繁体   English

蚂蚁脚本:有<exec>标记转储整个命令行

[英]Ant script: Have <exec> tag dump out entire command line

I have an ant build script with a fairly complex <exec> command with lots of <arg> tags that I'm trying to troubleshoot.我有一个 ant 构建脚本,其中包含一个相当复杂的<exec>命令,其中包含许多我正在尝试排除故障的<arg>标签。 I was wondering if it is possible to view the entire command line after ant has constructed it;我想知道是否可以在 ant 构建后查看整个命令行; either in the eclipse debugger or maybe by dumping it to a file.无论是在 eclipse 调试器中,还是通过将其转储到文件中。

Here's what I'm dealing with:这是我正在处理的:

<exec executable='"@{sdk}/bin/mxmlc.exe"' failonerror="true" >
                <arg line='-load-config "@{sdk}/frameworks/flex-config.xml"'/>

                <!-- Flex Build Path -->
                <!-- Source path -->
                <!-- Main source folder: -->
                <arg line='-compiler.source-path "@{project-dir}/src"'/>
                <!-- Additional source folders outside of the main source folder: -->
                <arg line='-compiler.source-path "@{project-dir}/inc/swf"'/>
                <arg line='-compiler.source-path "@{project-dir}/inc/images"'/>

                <!-- Output folder: -->
                <arg line='-output "@{output}"'/>

                <!-- Library path -->
                <!-- Build path libraries: -->
                <arg line='-compiler.library-path "@{libs}"'/>
                <arg line='-compiler.library-path "@{sdk}/frameworks/libs"'/>
                <arg line='-compiler.library-path "@{sdk}/frameworks/locale/en_US"'/>
                <arg line='-compiler.library-path "${dcradswcs.flex.path}/libs"'/>
                <arg line='-compiler.library-path "${dcradswcs.flex.path}/locale"'/>
                <arg line='-compiler.library-path "${fiberswcs.flex.path}/libs"'/>
                <arg line='-compiler.library-path "${fiberswcs.flex.path}/locale"'/>
                <arg line='-compiler.library-path "${flexunitframework.flex.path}/flexunitframework/libs/version4libs/Common"'/>
                <arg line='-compiler.library-path "${flexunitframework.flex.path}/flexunitframework/libs/version4libs/FlexProject"'/>
                <arg line='-compiler.library-path "${flexunitframework.flex.path}/flexunitframework/locale/version4locale"'/>
                <arg line='-compiler.library-path "${flexunitframework.flex.path}/flexunitframework/libs"'/>
                <!-- <arg line='-compiler.library-path "C:/rms-it-apps/adobe/fb4/plugins/com.adobe.flexbuilder.dcrad_4.0.1.277662/dcradSwcs/4.0/libs"'/>
                <arg line='-compiler.library-path "C:/rms-it-apps/adobe/fb4/plugins/com.adobe.flexbuilder.dcrad_4.0.1.277662/dcradSwcs/4.0/locale"'/>
                <arg line='-compiler.library-path "C:/rms-it-apps/adobe/fb4/plugins/com.adobe.flexbuilder.dcrad_4.0.1.277662/fiberSwcs/4.0/libs"'/>
                <arg line='-compiler.library-path "C:/rms-it-apps/adobe/fb4/plugins/com.adobe.flexbuilder.dcrad_4.0.1.277662/fiberSwcs/4.0/locale"'/>
                <arg line='-compiler.library-path "C:/rms-it-apps/adobe/fb4/plugins/com.adobe.flexbuilder.flexunit_4.0.1.277662/flexunitframework/libs/version4libs/Common"'/>
                <arg line='-compiler.library-path "C:/rms-it-apps/adobe/fb4/plugins/com.adobe.flexbuilder.flexunit_4.0.1.277662/flexunitframework/libs/version4libs/FlexProject"'/>
                <arg line='-compiler.library-path "C:/rms-it-apps/adobe/fb4/plugins/com.adobe.flexbuilder.flexunit_4.0.1.277662/flexunitframework/locale/version4locale"'/>
                <arg line='-compiler.library-path "C:/rms-it-apps/adobe/fb4/plugins/com.adobe.flexbuilder.flexunit_4.0.1.277662/flexunitframework/libs"'/> -->

                <!-- Runtime shared libraries. Order matters. -->
                <!-- Load framework libraries first -->
                <arg line='-runtime-shared-library-path="@{sdk}/frameworks/libs/textLayout.swc","textLayout_1.1.0.604.swz",,"textLayout_1.1.0.604.swf"'/>
                <arg line='-runtime-shared-library-path="@{sdk}/frameworks/libs/osmf.swc","osmf_flex.4.0.0.13495.swz",,"osmf_flex.4.0.0.13495.swf"'/>
                <arg line='-runtime-shared-library-path="@{sdk}/frameworks/libs/framework.swc","framework_4.1.0.16076.swz",,"framework_4.1.0.16076.swf"'/>
                <arg line='-runtime-shared-library-path="@{sdk}/frameworks/libs/spark.swc","spark_4.1.0.16076.swz",,"spark_4.1.0.16076.swf"'/>
                <arg line='-runtime-shared-library-path="@{sdk}/frameworks/libs/sparkskins.swc","sparkskins_4.1.0.16076.swz",,"sparkskins_4.1.0.16076.swf"'/>
                <arg line='-runtime-shared-library-path="@{sdk}/frameworks/libs/rpc.swc","rpc_4.1.0.16076.swz",,"rpc_4.1.0.16076.swf"'/>
                <arg line='-runtime-shared-library-path="@{sdk}/frameworks/libs/datavisualization.swc","datavisualization_4.1.0.16076.swz",,"datavisualization_4.1.0.16076.swf"'/>

                <!-- Load after framework libraries -->
                <!-- Note: do not put spaces between comma delimited values -->
                <arg line='${rsl.applicationSettings}'/>
                <arg line='${rsl.authorization}'/>
                <arg line='${rsl.autofill}'/>
                <arg line='${rsl.customComponents}'/>
                <arg line='${rsl.navigation}'/>
                <arg line='${rsl.lookup}'/>

                <!-- Libraries needed for QTP -->
                <arg line="${qtp.arg1}"/> 
                <arg line="${qtp.arg2}"/>
                <arg line="${qtp.arg3}"/>
                <arg line="${qtp.arg4}"/>
                <arg line="${qtp.arg5}"/>

                <arg line="-verify-digests=false"/>

                <!-- Flex Compiler -->
                <!-- Compiler options -->
                <arg line="-compiler.accessible=true"/>
                <arg line="-compiler.strict=true"/>
                <arg line="-warnings=true" />

                <!-- Additional compiler arguments: -->
                <arg line='-theme=@{sdk}/frameworks/themes/Halo/halo.swc -services "@{services-config}" -locale en_US'/>

                <!-- Flex Server -->        
                <!-- Server location -->
                <!-- Context root: -->
                <arg line="-compiler.context-root=@{context-root}"/>

                <!-- Miscellaneous -->
                <arg line="-compiler.incremental=true"/>
                <arg line="-compiler.keep-generated-actionscript=false"/>
                <arg line="-compiler.verbose-stacktraces=true"/>                
                <arg line="-show-unused-type-selector-warnings=false"/>         
                <arg line="-optimize=true" />       
                <arg line="-debug=@{debug}" />                              
                <arg line='"@{mxml}"'/>
            </exec>

This is the error I'm getting:这是我得到的错误:

BUILD FAILED
C:\dev\workspace\rmsitepi2\build.raytheon.suite.tomcat.xml:50: The following error occurred while executing this line:
C:\dev\workspace\rmsitepi2\build.raytheon.flex.xml:33: The following error occurred while executing this line:
C:\dev\workspace\rmsitepi2\build.raytheon.flex.xml:159: exec returned: 1

ant -v 通常可以解决问题,但您可能会发现有很多输出需要查看。

What about some good old echoing via:一些好的旧回声怎么样:

<echoxml>
 <exec executable="..." failonerror="true" >
  <arg value="..."/>
  <arg value="..."/>
   ...
 </exec>
</echoxml>

for testing your stuff (attribute values, properties resolved .. etc.) before activating the real thing !?在激活真实的东西之前测试你的东西(属性值,属性解析......等)!?
That's what I use frequently, because ant -verbose | debug这就是我经常使用的,因为ant -verbose | debug ant -verbose | debug is too chatty when I need to check only specific parts.当我只需要检查特定部分时, ant -verbose | debug就太啰嗦了。 Afterwards simply delete or comment the echoxml tags.之后只需删除或注释echoxml标签。

For echoxml you need Ant >= 1.7对于echoxml,您需要 Ant >= 1.7

Try using the log4j ANT listener .尝试使用log4j ANT 侦听器 It can be configured to zero in on the Exec task output.它可以配置为在 Exec 任务输出中归零。

Example例子

Project files项目文件

$ tree
.
|-- build.xml
`-- lib
    |-- log4j-1.2.16.jar
    `-- log4j.properties

1 directory, 3 files

build.xml构建文件

<project name="name" default="run">

    <target name="run">
        <exec executable="echo">
            <arg line="hello world"/>
        </exec>
    </target>

</project>

log4j.properties log4j.properties

log4j.rootLogger=ERROR, LogFile
log4j.logger.org.apache.tools.ant.taskdefs.ExecTask=DEBUG

log4j.appender.LogFile=org.apache.log4j.FileAppender
log4j.appender.LogFile.layout=org.apache.log4j.PatternLayout
log4j.appender.LogFile.layout.ConversionPattern=[%6r] %8c{1} : %m%n
log4j.appender.LogFile.file=build.log

Running the build运行构建

Need to specify the listener and the directory containing the log4j dependencies:需要指定监听器和包含log4j依赖的目录:

ant -listener org.apache.tools.ant.listener.Log4jListener -lib lib

Producing the following output in the build.log filebuild.log文件中生成以下输出

$ cat build.log
[     0] ExecTask : Current OS is Linux
[    14] ExecTask : Executing 'echo' with arguments:
'hello'
'world'

The ' characters around the executable and arguments are
not part of the command.
[    20] ExecTask : hello world

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM