我有一个包含jar的目录。我没有他们的名字,我有一个目标,它采用jar的名称及其位置,并对其进行操作。
<target name="addAttributes">
<mkdir dir="${folderName}/Temp"/>
<unzip src="${jarNamewtPath}" dest="${folderName}/Temp"/>
<delete file="${jarNamewtPath}"/>
<jar destfile="${jarNamewtPath}">
<manifest>
<attribute name="Application-Name" value="someValue"/>
<attribute name="Trusted-Only" value="true"/>
<attribute name="Codebase" value="*"/>
<attribute name="Permissions" value="all-permissions"/>
</manifest>
<fileset dir="${folderName}/Temp" />
</jar>
<delete dir="${folderName}/Temp"/>
</target>
如何获取文件的名称并将它们单独传递给此目标。
<target name="getJars">
<fileset id="getJars" dir="${someDir}/Jars">
<include name="*.jar" />
</fileset>
..... get list of jars
<antcall target="addAttributes">
<param name="folderName" value="${path}"/>
<param name="jarNamewtPath" value="${path}/name.jar"/>
</antcall>
</target>
任何帮助/线索将不胜感激。
答案 0 :(得分:1)
最好每个版本只调用<target>
一次。对于可在构建中重复使用的共享功能,请考虑使用<macrodef>
。
以下是使用第三方Ant-Contrib的<for>
task重复调用addAttributes <macrodef>
的示例:
<project name="ant-for-macrodef" default="getJars">
<taskdef resource="net/sf/antcontrib/antlib.xml" />
<macrodef name="addAttributes">
<attribute name="jar-path"/>
<sequential>
<echo>jar-path: @{jar-path}</echo>
<!-- Make temp.dir locally scoped to this macrodef. -->
<local name="temp.dir"/>
<property name="temp.dir" value="myTempDir"/>
<echo>Perform Jar operations here.</echo>
</sequential>
</macrodef>
<target name="getJars">
<fileset id="getJars" dir="${someDir}/Jars">
<include name="*.jar" />
</fileset>
<for param="jar.file">
<fileset refid="getJars"/>
<sequential>
<addAttributes jar-path="@{jar.file}"/>
</sequential>
</for>
</target>
</project>