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

Eya*_*him 5 ivy

我想我不需要问这个,但我没有任何进展.

这个问题的解决方案: 常春藤的maven范围如何映射到常春藤配置实际上解决了问题,但在理论部分.

我有这个配置:

<conf name="compile"  description="???" />
<conf name="runtime"  description="???" extends="compile" />
<conf name="test"     description="???" extends="runtime" />
<conf name="provided" description="???" />
Run Code Online (Sandbox Code Playgroud)

假设我有这种依赖:

<dependency org="org.apache.tomcat" name="servlet-api" rev="6.0.16" transitive="false" />
Run Code Online (Sandbox Code Playgroud)

我想要的是:当我调用常春藤:在捆绑它之前检索将库复制到.war lib目录,我只想复制所有运行时(并隐式编译)但没有servlet-api.

那么如何使用常春藤:然后检索?

<ivy:retrieve conf="WHAT_TO_PUT_HERE" />
Run Code Online (Sandbox Code Playgroud)

以及如何配置依赖项:

<dependency conf="WHAT_IS_THE_CONF_MAPPING" org="org.apache.tomcat" name="servlet-api" rev="6.0.16" transitive="false" />
Run Code Online (Sandbox Code Playgroud)

我在这里稳定,所以请任何帮助将不胜感激.

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

conf="master"
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*nor 6

这是将依赖关系映射到本地"提供"配置的方式:

<dependency org="org.apache.tomcat" name="servlet-api" rev="6.0.16" conf="provided->master"/>
Run Code Online (Sandbox Code Playgroud)

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

provided->master
   ^        ^
   |        |
 Local    Remote
 config   config
Run Code Online (Sandbox Code Playgroud)

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

这意味着不需要"transitive = false"属性.

更新

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

选项1

您可以创建单个类路径,如下所示:

<ivy:cachepath pathid="compile.path" conf="compile,provided"/>
Run Code Online (Sandbox Code Playgroud)

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

<javac ... classpathref="compile.path">
..
Run Code Online (Sandbox Code Playgroud)

选项2

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

<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="provide.path" conf="provided"/>
Run Code Online (Sandbox Code Playgroud)

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

<javac ...
   <classpath>
      <path refid="compile.path"/>
      <path refid="provided.path"/>
   </classpath>
Run Code Online (Sandbox Code Playgroud)

我认为这明确地解释了你如何使用这个特殊的提供范围,但这取决于你.