gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:22:44 26 4
gpt4 key购买 nike

我的目标是让我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com