嗨,我正在尝试构建一个基于if条件复制某个lib文件的ant脚本.但它似乎没有工作,因为我得到这个错误:
build.xml:20:fileset不支持嵌套的"if"元素.
这是它失败的部分:
<target name="resolve">
<delete dir="${lib.dir}">
<include name="*" />
</delete>
<copy todir="${lib.dir}">
<fileset dir="ext-libs" >
<if name="${release}" value="true">
<include name="hello-client-[^DEBUG]*.jar" />
</if>
<else>
<include name="hello-client-*DEBUG.*.jar" />
</else>
</fileset>
</copy>
</target>
Run Code Online (Sandbox Code Playgroud)
@JoseK是对的.ANT文件集不支持嵌套的"if"语句.事实上,"if"语句不是核心ANT的一部分,推荐的方法是使用条件目标(参见示例)
@slipset走在正确的轨道上.常春藤配置可用于有选择地选择依赖项.
此示例旨在以两种方式之一调用
$ ant clean build
$ tree
.
|-- build.xml
|-- ivy.xml
`-- lib
|-- slf4j-api-1.6.4.jar
`-- slf4j-simple-1.6.4.jar
Run Code Online (Sandbox Code Playgroud)
要么
$ ant -Drelease=1 clean build
$ tree
.
|-- build.xml
|-- ivy.xml
`-- lib
|-- logback-classic-1.0.3.jar
|-- logback-core-1.0.3.jar
`-- slf4j-api-1.6.4.jar
Run Code Online (Sandbox Code Playgroud)
<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">
<target name="resolve">
<ivy:resolve/>
</target>
<target name="retrieve-alt" depends="resolve" unless="release">
<ivy:retrieve pattern="lib/[artifact]-[revision](-[classifier]).[ext]" conf="altruntime"/>
</target>
<target name="retrieve-release" depends="resolve" if="release">
<ivy:retrieve pattern="lib/[artifact]-[revision](-[classifier]).[ext]" conf="runtime"/>
</target>
<target name="build" depends="retrieve-alt,retrieve-release"/>
<target name="clean">
<delete dir="lib"/>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
笔记:
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="demo"/>
<configurations>
<conf name="compile" description="Required to compile application"/>
<conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
<conf name="altruntime" description="Alternative 'runtime' configuration" extends="compile"/>
<conf name="test" description="Required for test only" extends="altruntime"/>
</configurations>
<dependencies>
<!-- compile dependencies -->
<dependency org="org.slf4j" name="slf4j-api" rev="1.6.4" conf="compile->default"/>
<!-- runtime dependencies -->
<dependency org="ch.qos.logback" name="logback-classic" rev="1.0.3" conf="runtime->default"/>
<!-- altruntime dependencies -->
<dependency org="org.slf4j" name="slf4j-simple" rev="1.6.4" conf="altruntime->default"/>
<!-- test dependencies -->
<dependency org="junit" name="junit" rev="4.10" conf="test->default"/>
</dependencies>
</ivy-module>
Run Code Online (Sandbox Code Playgroud)
注意:
常春藤配置可用于模拟Maven范围,但实际上常春藤配置可以表示依赖关系的任何逻辑分组.
以下是任何Java构建中所需的3个标准类路径:
<configurations>
<conf name="compile" description="Required to compile application"/>
<conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
<conf name="test" description="Required for test only" extends="runtime"/>
</configurations>
Run Code Online (Sandbox Code Playgroud)
请注意"扩展"语法,使您可以创建更大的集合.例如,jar 的运行时集还包括编译代码所需的任何内容.
在您意识到它们可用于有选择地填充ANT路径之前,常常难以理解常春藤配置:
<ivy:cachepath pathid="compile.path" conf="compile"/>
<javac ..... classpathref="compile.path"/>
Run Code Online (Sandbox Code Playgroud)
或者用于有选择地填充目录
<ivy:retrieve pattern="build/WEB-INF/lib/[artifact].[ext]" conf="runtime"/>
Run Code Online (Sandbox Code Playgroud)
映射用于确定项目中的jar组如何与其他项目中的jar组相关联.
这通常发生如下:
<dependency org="org.slf4j" name="slf4j-api" rev="1.6.4" conf="compile->default"/>
Run Code Online (Sandbox Code Playgroud)
这里我们的编译配置由远程默认配置填充(通常其他模块编译依赖项)
| 归档时间: |
|
| 查看次数: |
5930 次 |
| 最近记录: |