gpt4 book ai didi

java - 获取 Ivy :retrieve to not copy a jar into two configurations?

转载 作者:行者123 更新时间:2023-12-02 00:51:02 29 4
gpt4 key购买 nike

我正在尝试设置我的 ant 构建,以便运行 Ivy 函数的目标与持续构建和大多数开发人员运行的目标完全分开。我希望一个目标下载更新的依赖项,我将 checkin 该依赖项。其他目标将通过包含相关目录中的 *.jar 来设置其类路径。

我有两种配置:

<configurations>
<conf name="compile" />
<conf name="test" />
</configurations>

我有一些依赖项:

<dependency
org="my.org"
name="some-lib"
rev="latest.release"
conf="compile->default" />
<dependency
org="my.org"
name="some-test-lib"
rev="latest.release"
conf="test->default" />

我使用 ivy:retrieve 下载这些依赖项及其传递依赖项:

<ivy:retrieve
pattern="lib/[conf]/[type]/[artifact]-[revision].[ext]"
sync="true"
file="ivy.xml" />

问题是我在编译目录和测试目录之间看到一些重复的 jar 文件,这些文件来自传递依赖项。由于我想 checkin 所有这些 jar 并使用它们来创建类路径,因此我想避免重复。这可能吗?

lib/compile/jar/some-lib-1.0.jar
lib/compile/jar/slf4j-api-1.5.11.jar
lib/test/jar/some-test-lib-1.0.jar
lib/test/jar/junit-4.7.jar
lib/test/jar/slf4j-api-1.5.11.jar

最佳答案

这不是重复,每个配置都是一组单独的 jar,并且 ivy restrieve 任务忠实地创建每个组......

也许直接创建类路径比填充本地 lib 目录更有意义。

这是我的 ANT 构建文件的片段:

<target name="get-dependencies">
<ivy:resolve/>

<ivy:cachepath pathid="compile.path" conf="compile" />
<ivy:cachepath pathid="test.path" conf="test" />
</target>

<target name="compile" depends="get-dependencies">
<javac srcdir="src" destdir="build/classes" classpathref="compile.path"/>
</target>

当我需要创建一组 jar 的本地副本(例如组装 Web 应用程序的目录)时,我通常只使用 ivy retrieve 任务:

<ivy:retrieve pattern="build/WEB_INF/lib/[artifact].[ext]" conf="runtime"/>

更新

另一种选择是指示 ivy 在下载临时依赖项时排除 slf4j 模块,如下所示:

<dependency org="my.org" name="some-lib" rev="latest.release" conf="compile->default">
<exclude module="slf4j-api"/>
</dependency>

<dependency org="my.org" name="some-test-lib" rev="latest.release" conf="test->default">
<exclude module="slf4j-api"/>
</dependency>

关于java - 获取 Ivy :retrieve to not copy a jar into two configurations?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3087687/

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