eclipse Ant 脚本:让 <exec> 标记转储整个命令行

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10302489/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 18:05:33  来源:igfitidea点击:

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

javaeclipseant

提问by opike

I have an ant build script with a fairly complex <exec>command with lots of <arg>tags that I'm trying to troubleshoot. I was wondering if it is possible to view the entire command line after ant has constructed it; either in the eclipse debugger or maybe by dumping it to a file.

我有一个 ant 构建脚本,其中包含一个相当复杂的<exec>命令,其中包含许多<arg>我正在尝试排除故障的标签。我想知道是否可以在 ant 构建后查看整个命令行;无论是在 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

回答by Mark Thomas

ant -v usually does the trick but you may find you have a lot of output to look through.

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

回答by Rebse

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 | debugis too chatty when I need to check only specific parts. Afterwards simply delete or comment the echoxmltags.

在激活真实的东西之前测试你的东西(属性值,属性解析......等)!?
这就是我经常使用的,因为ant -verbose | debug当我只需要检查特定部分时太健谈了。之后只需删除或评论echoxml标签。

For echoxmlyou need Ant >= 1.7

对于echoxml,您需要 Ant >= 1.7

回答by Mark O'Connor

Try using the log4j ANT listener. It can be configured to zero in on the Exec task output.

尝试使用log4j ANT 侦听器。它可以配置为在 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.logfile

build.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