Ant - 运行 .jar 文件不知道其全名
Ant - run .jar file without knowing its full name
我的蚂蚁 build.xml
看起来像这样:
<project name="project_name" default="build" basedir=".">
<property name="src.dir" value="./src"/>
<property name="build.dir" value="./build"/>
<property name="lib.dir" value="./lib"/>
<property name="jar.name.prefix" value="myprogram-"/>
<property name="output_file.name" value="output"/>
<path id="lib.path">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="init">
<mkdir dir="${build.dir}"/>
</target>
<target name="build" depends="init">
<javac srcdir="${src.dir}" destdir="${build.dir}">
<classpath refid="lib.path"/>
</javac>
</target>
<target name="dist" depends="build">
<tstamp/>
<jar destfile="${jar.name.prefix}${DSTAMP}.jar" basedir="${build.dir}">
<manifest>
<attribute name="Main-Class" value="my.app.MainClass"/>
<attribute name="Project" value="MyApp"/>
<attribute name="BuildDate" value="${DSTAMP}"/>
</manifest>
</jar>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
<delete file="${output_file.name}"/>
<delete>
<fileset dir=".">
<include name="*.jar"/>
</fileset>
</delete>
</target>
</project>
我想添加 运行 目标。但是 dist 目标生成的文件格式为:myprogram-20161029.jar。因此,应执行的文件的名称会有所不同,具体取决于文件的构建时间。 运行 目标应如下所示:
<target name="run" depends="dist">
<java jar="what to put here??" fork="true" output="output.file.name"/>
</target>
但据我所读,java 目标的 jar 参数仅接受 .jar 文件的位置,我不知道。我只知道文件名满足模式./${jar.name.prefix}*.jar
。
有没有人知道如何获取已构建的 .jar 文件的文件名并将其传递给 java[的 jar 参数任务?
首先,由于 "run" 目标依赖于 "dist",因此 "dist" 中定义的所有属性都可以在 "run" 中访问。因此,您可以像这样轻松地使用相同的 ${DSTAMP}(由 "tstamp" 目标定义):
<target name="run" depends="dist">
<java jar="${jar.name.prefix}${DSTAMP}.jar" fork="true" output="output.file.name"/>
</target>
其次,我建议使用以下内容定义自定义变量名称而不是 DSTAMP:
<tstamp prefix="jardate"/>
然后 DSTAMP 的使用将是 ${jardate.DSTAMP} 而不是 ${DSTAMP}。
我的蚂蚁 build.xml
看起来像这样:
<project name="project_name" default="build" basedir=".">
<property name="src.dir" value="./src"/>
<property name="build.dir" value="./build"/>
<property name="lib.dir" value="./lib"/>
<property name="jar.name.prefix" value="myprogram-"/>
<property name="output_file.name" value="output"/>
<path id="lib.path">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="init">
<mkdir dir="${build.dir}"/>
</target>
<target name="build" depends="init">
<javac srcdir="${src.dir}" destdir="${build.dir}">
<classpath refid="lib.path"/>
</javac>
</target>
<target name="dist" depends="build">
<tstamp/>
<jar destfile="${jar.name.prefix}${DSTAMP}.jar" basedir="${build.dir}">
<manifest>
<attribute name="Main-Class" value="my.app.MainClass"/>
<attribute name="Project" value="MyApp"/>
<attribute name="BuildDate" value="${DSTAMP}"/>
</manifest>
</jar>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
<delete file="${output_file.name}"/>
<delete>
<fileset dir=".">
<include name="*.jar"/>
</fileset>
</delete>
</target>
</project>
我想添加 运行 目标。但是 dist 目标生成的文件格式为:myprogram-20161029.jar。因此,应执行的文件的名称会有所不同,具体取决于文件的构建时间。 运行 目标应如下所示:
<target name="run" depends="dist">
<java jar="what to put here??" fork="true" output="output.file.name"/>
</target>
但据我所读,java 目标的 jar 参数仅接受 .jar 文件的位置,我不知道。我只知道文件名满足模式./${jar.name.prefix}*.jar
。
有没有人知道如何获取已构建的 .jar 文件的文件名并将其传递给 java[的 jar 参数任务?
首先,由于 "run" 目标依赖于 "dist",因此 "dist" 中定义的所有属性都可以在 "run" 中访问。因此,您可以像这样轻松地使用相同的 ${DSTAMP}(由 "tstamp" 目标定义):
<target name="run" depends="dist">
<java jar="${jar.name.prefix}${DSTAMP}.jar" fork="true" output="output.file.name"/>
</target>
其次,我建议使用以下内容定义自定义变量名称而不是 DSTAMP:
<tstamp prefix="jardate"/>
然后 DSTAMP 的使用将是 ${jardate.DSTAMP} 而不是 ${DSTAMP}。