首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可选JAR META-INF的Ant Contrib If

可选JAR META-INF的Ant Contrib If
EN

Stack Overflow用户
提问于 2013-02-01 20:57:13
回答 3查看 2.3K关注 0票数 4

我有一个场景,我试图在多个项目中重用相同的build.xml文件。在每一种情况下,最终的目标都是一个dist,它可以将所有的东西都放大。唯一的区别是,有些项目有一个src/main/java/META-INF/*目录,而另一些项目则没有(而且只有一个src/main/java/*目录)。

如果构建看到可用的<if/>目录,我希望使用Ant-cont肋骨META-INF/任务来选择定义src/main/java/META-INF/*目录。所以就像这样:

代码语言:javascript
复制
<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. 当我运行这个目标时,我会得到一个构建异常,说明我不能在<if/>任务中嵌套一个<jar/>
  2. 我不知道如何将<jar/>任务配置为在类路径根目录下创建一个META-INF目录,并将所有src/main/java/META-INF内容复制到其中。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-11 19:02:09

听起来你想要利用更模块化的构建配置。不如有两个目标:

代码语言:javascript
复制
<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/-containing项目时,只需运行jar-with-metainf

票数 1
EN

Stack Overflow用户

发布于 2013-02-04 13:20:00

你让事情变得比必要的更困难。只需使用以下任务,如果存在META文件夹,它将包含在jar中,如果不存在,则忽略该文件夹:

代码语言:javascript
复制
<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>
票数 4
EN

Stack Overflow用户

发布于 2013-02-04 13:14:33

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

代码语言:javascript
复制
<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 points out,您实际上并不需要它来回答这个特定的问题,但是对于其他情况来说,这是一个很有用的技巧。当定义<path>元素而不是文件集时,我发现它更有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14654888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档