如何在 IVY 中没有提供的情况下复制运行时库

2023-11-21

我以为我不需要问这个,但我没有任何进展。

这个问题的解答:ivy如何将maven范围映射到ivy配置实际上解决了问题,但在理论部分。

我有这样的配置:

<conf name="compile"  description="???" />
<conf name="runtime"  description="???" extends="compile" />
<conf name="test"     description="???" extends="runtime" />
<conf name="provided" description="???" />

假设我有这样的依赖:

<dependency org="org.apache.tomcat" name="servlet-api" rev="6.0.16" transitive="false" />

我想要的是:当我在捆绑之前调用 ivy:retrieve 将库复制到 .war lib 目录时,我只想复制所有运行时(并隐式编译),而不复制 servlet-api。

那么如何使用ivy:retrieve呢?

<ivy:retrieve conf="WHAT_TO_PUT_HERE" />

以及如何配置依赖项:

<dependency conf="WHAT_IS_THE_CONF_MAPPING" org="org.apache.tomcat" name="servlet-api" rev="6.0.16" transitive="false" />

我在这里处于稳定状态,因此请提供任何帮助,我们将不胜感激。

知道 servlet-api 的 ivy.xml 定义了工件

conf="master"

所以我认为问题是如何“真正”将maven提供的范围映射到IVY提供的配置。


这是将依赖项映射到本地“提供的”配置的方法:

<dependency org="org.apache.tomcat" name="servlet-api" rev="6.0.16" conf="provided->master"/>

配置映射的工作原理如下:

provided->master
   ^        ^
   |        |
 Local    Remote
 config   config

正如答案中所解释的,特殊的“主”配置仅包含该模块本身发布的工件,没有传递依赖项:

  • ivy如何将maven范围映射到ivy配置

这意味着不需要“transitive=false”属性。

Update

如何使用该配置取决于您。第一个选项更简单,但我更喜欢第二种方法,因为我的配置报告与我的类路径内容匹配

Option 1

您可以按如下方式创建单个类路径:

<ivy:cachepath pathid="compile.path" conf="compile,provided"/>

然后可以在 javac 任务中使用它,如下所示:

<javac ... classpathref="compile.path">
..

Option 2

或者我更喜欢在配置和类路径之间进行一对二一的映射:

<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="provide.path" conf="provided"/>

后一种方法的问题是 javac 任务需要明确声明类路径用法,如下所示:

<javac ...
   <classpath>
      <path refid="compile.path"/>
      <path refid="provided.path"/>
   </classpath>

我认为这明确地解释了您如何使用这个特殊提供的范围,但这实际上取决于您。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 IVY 中没有提供的情况下复制运行时库 的相关文章

随机推荐