繁体   English   中英

Ant Contrib如果用于可选JAR META-INF

[英]Ant Contrib If for optional JAR META-INF

我有一种情况,我试图在多个项目中重复使用相同的build.xml文件。 在每种情况下,最终目标都是将JAR打包起来的dist 唯一的区别是,某些项目具有src/main/java/META-INF/*目录,而其他项目则没有(仅具有src/main/java/*目录)。

如果构建看到可用的src/main/java/META-INF/*目录,我想使用Ant-Contrib <if/>任务有选择地定义一个META-INF/目录。 所以像这样:

<jar jarfile="myapp.jar">
    <if>
        <available file="src/main/java/META-INF" />
        <then>
            <!--
                Copy everything from src/main/java/META-INF into
                the JAR's META-INF directory.

                But how?!?
            -->
            <echo message="I'm trying to copy META-INF!" />
        </then>
    </if>
</jar>

但我在这里遇到两件事:

  1. 当我运行该目标时,我得到一个生成异常,说明我不能在<jar/>任务中嵌套<if/>
  2. 我不确定如何配置<jar/>任务以在类路径的根目录下创建一个META-INF目录,然后将所有src/main/java/META-INF内容复制到其中。

有什么想法吗? 提前致谢。

您正在使它变得不必要。 只需使用以下任务,如果jar存在,则META-INF文件夹将包含在jar中;如果不存在,则将其忽略:

<target name="dist">
    <jar destfile="test.jar">
        <fileset dir="classes"/> <-- or whatever directory you want to put in the jar -->
        <metainf dir="src/main/java/META-INF" erroronmissingdir="false"/>
    </jar>
</target>

该消息是正确的,因为<if>本身是一个任务,您不能在<jar>任务中嵌套其他任务。 但是,您可以做的是使用<if>任务定义一个具有ID的合适文件集,然后使用refid将其包含在JAR中:

<if>
    <available file="src/main/java/META-INF" />
    <then>
        <fileset id="src.metainf" dir="src/main/java/META-INF" />
    </then>
    <else>
        <fileset id="src.metainf" dir="." excludes="**/*" />
    </else>
</if>

<jar destfile="myapp.jar">
    <metainf refid="src.metainf" />
</jar>

正如JB Nizet指出的那样,您实际上不需要回答这个特定的问题,但是对于其他情况,这是一个有用的技巧。 我发现在定义<path>元素而不是文件集时,它更有用。

听起来您想利用模块化程度更高的构建配置。 如何实现两个目标:

<target name="jar">
    <!-- Normal JAR tasks like you currently have (sans the metainf stuff). -->
</target>

<target name="jar-with-metainf">
    <jar destfile="test.jar">
        <fileset dir="classes"/>
        <metainf dir="src/main/java/META-INF"/>
    </jar>
</target>

然后,当您要构建包含META-INF/的项目时,只需运行jar-with-metainf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM