如何在ANT中制作JAR时有条件地包含清单选项

sch*_*mmd 2 ant program-entry-point jar class manifest

我正在使用ANT来管理多个项目.我有一个build-common.xml脚本,单个项目包含.有些项目是图书馆,有些是项目.对于这些节目,我想包括

<manifest>
    <attribute name="Main-Class" value="${main.class}"/>
</manifest>
Run Code Online (Sandbox Code Playgroud)

<jar>标签中.对于库,我想有一个空的jar标签,如下所示.

<target name="jar" depends="compile" description="generate a jar">
    <mkdir dir="${build}/jar" />
    <property name="jarfile" value="${jar}/${ant.project.name}.jar" />
    <jar jarfile="${jarfile}" basedir="${classes}">
    </jar>
</target>
Run Code Online (Sandbox Code Playgroud)

有没有办法只有在定义属性main.class时才能包含清单属性Main-Class?

谢谢!

Axe*_*ine 6

使用条件目标:

<target name="jar-mkdir" depends="compile" description="generate a jar">
  <mkdir dir="${build}/jar" />
  <property name="jarfile" value="${jar}/${ant.project.name}.jar" />
</target>

<target name="jar-main" depends="compile" description="generate a jar" if="main.class">
  <jar jarfile="${jarfile}" basedir="${classes}">
    <manifest>
      <attribute name="Main-Class" value="${main.class}"/>
    </manifest>
  </jar>
</target>

<target name="jar-nomain" depends="compile" description="generate a jar" unless="main.class">
  <jar jarfile="${jarfile}" basedir="${classes}">
  </jar>
</target>


<target name="jar" depends="compile, jar-mkdir, jar-main, jar-nomain" description="generate a jar">
</target>
Run Code Online (Sandbox Code Playgroud)

这将jar-main仅在main.class存在时运行(并添加清单).当它不存在时jar-nomain将运行.