Ant - build脚本找不到属性文件中定义的pathelement

时间:2013-04-03 13:11:47

标签: java ant build

我有一个具有以下目标的ant构建脚本:

<target name="_initLiveProps">
        <property file="buildscripts/live.properties"/>
</target>

<target name="buildLive"  depends="_initLiveProps">
        <property file="buildscripts/live.properties"/>
</target>

在构建脚本中,我有几个声明如下所示:

<path id="project.class.path">      
        <pathelement location="./../lib/log4j-1.2.16.jar" />
        <pathelement location="${product-def.jar}"/>
</path>

product-def.jar定义在buildscripts / live.properties文件中定义为

product-def.jar=./../lib/product-def/live/product-def.jar

当我构建项目时(使用ant buildLive)我得到编译错误,主要是因为它找不到product-def.jar中定义的类。

我试图打印出类路径,如下所示

<property name="myclasspath" refid="project.class.path"/>
<echo message="${myclasspath}" />

输出结果为c:\product\lib\log4j-1.2.16.jar;c:\product\${product-def.jar}

以上表明以下定义不正确

<pathelement location="${product-def.jar}"/>

定义属性文件中定义的路径元素的正确方法是什么?

修改

我认为问题是project.class.path的定义是在buildLive目标中加载属性文件之前初始化的。 有没有办法延迟project.class.path的初始化,直到buildLive目标完成后?

1 个答案:

答案 0 :(得分:1)

  

有没有办法延迟project.class.path的初始化,直到buildLive目标完成后?

<path>定义放在<target>

<target name="_initLiveProps">
        <property file="buildscripts/live.properties"/>
        <path id="project.class.path">      
                <pathelement location="./../lib/log4j-1.2.16.jar" />
                <pathelement location="${product-def.jar}"/>
        </path>
</target>

所有依赖(直接或间接)此目标的目标都可以看到<path>

如果您有多个不同的目标加载不同的属性,例如_initLiveProps_initDevProps等等,您可以将<path>定义放入共同目标,如下所示

<target name="classpath">
        <path id="project.class.path">      
                <pathelement location="./../lib/log4j-1.2.16.jar" />
                <pathelement location="${product-def.jar}"/>
        </path>
</target>

<target name="_loadLiveProps">
        <property file="buildscripts/live.properties"/>
</target>
<target name="_initLiveProps" depends="_loadLiveProps, classpath" />

<target name="_loadDevProps">
        <property file="buildscripts/dev.properties"/>
</target>
<target name="_initDevProps" depends="_loadDevProps, classpath" />