ant - 如何使用 ivy 构建 war 而不将 jars 复制到 lib 目录

标签 ant ivy

我的目标是让我的 ant 构建脚本构建一个 war 文件,并包含 ivy 知道这个项目所依赖的 jars。我目前能想到的最好的代码如下

<mkdir dir="dist/lib"/>
<ivy:retrieve pattern="dist/lib/[artifact].[ext]" sync="true"/>
<war destfile="dist/${ivy.module}.war" basedir="build" includes="**/*.class"
    webxml="${war.webxml}">
    <fileset dir="${war.web}"/>
    <lib dir="dist/lib"/>
</war>

这段代码的问题是它复制了 jars 两次。一次进入我的 dist/lib 目录,并在它创建时再次进入 war 。它有效,但我无法动摇有更好方法的感觉。

我想做的是更像以下内容
<ivy:cachepath pathid="locpathref.classpath"/>
<war destfile="dist/${ivy.module}.war" basedir="build" includes="**/*.class"
    webxml="${war.webxml}">
    <fileset dir="${war.web}"/>
    <lib refid="locpathref.classpath"/>
</war>

问题是 lib 标签不接受任何类型的 refid。有什么想法还是我坚持使用一组额外的文件副本?

最佳答案

这里的问题是 标签是自定义的 文件集 将它的文件定位到 war 文件的 lib 子目录中。可能可以编写自定义 war 任务,但我认为不值得付出努力。

如果想改进 ivy 管理 war 依赖项的方式,我可以建议使用配置吗?

创建描述运行时依赖项的配置:

    <ivy-module version="2.0">
    <info organisation="apache" module="hello-ivy"/>
    <configurations>
        <conf name="build" description="Libraries needed to for compilation"/>
        <conf name="war" extends="build" description="Libraries that should be included in the war file" />
    </configurations>
    <dependencies>
        <dependency org="commons-lang" name="commons-lang" rev="2.0" conf="build->*,!sources,!javadoc"/>
        <dependency org="commons-cli" name="commons-cli" rev="1.0" conf="build->*,!sources,!javadoc"/>
    </dependencies>
</ivy-module>

之后,您将它们检索到一个专用目录中(使用模式),可以使用 简单地将其包含在内。 war 任务的标签:
    <ivy:retrieve pattern="${lib.dir}/[conf]/[artifact].[ext]"/>

    <war destfile="${war.file}" webxml="${resources.dir}/web.xml">
        <fileset dir="${resources.dir}" excludes="web.xml"/>
        <lib dir="${lib.dir}/war"/>
    </war>

这种方法的优点是您可以使用 Ivy 配置文件 每个项目依赖项的属性,以最终决定 jar 是否包含在 war 文件中。构建文件不再关心。

总之,我明白你的帖子的重点是关注你的 jar 文件的多个副本......使用我建议的方法将进一步增加你的副本,但我认为这不是问题,前提是你有一个干净的目标要删除他们之后。

关于ant - 如何使用 ivy 构建 war 而不将 jars 复制到 lib 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078007/

相关文章:

java - 如何将文件夹的 url 提供给 ivy 模式

bash - 如何在 NetBeans 中保存时运行 bash 脚本?

jenkins - 如何使用 JUnit 设置 Jenkins

android - gradle如何执行一个ant构建文件

java - NetBeans 中的 Apache Ivy 用于解析导入

java - 如何排除 Ivy 中的工件

java - 解决 IVY ANT 的 Oracle JDBC 依赖性

variables - Ant loadfile 覆盖属性

maven - 使用 Maven 元数据发布 Ivy 快照

build - ivy.xml 用于发布工件的目的是什么?