常春藤:配置。我错过了什么吗?

时间:2012-10-22 16:02:38

标签: ivy

当我第一次开始使用Ivy时,我询问了配置,并指出Lightguard's blog post on the subject。我发现它非常有帮助。但是,我现在对此帖(和其他人)所拥有的提供的配置有疑问。配置项如下所示:

<conf name="provided" 
    visibility="public" 
    description="this is much like compile, but indicates 
         you expect the JDK or a container to provide it. 
         It is only available on the compilation classpath, 
         and is not transitive."/>

我将description参数分开,因此更容易看到。注意它说“并且不是传递”。

Ivy如何知道provided配置不可传递?配置没有transitive="false"参数。是否因为此配置与Maven存储库交互的方式使其不可传递?或者,这是一个小的故障,每个人都从一个博客复制到另一个博客?

1 个答案:

答案 0 :(得分:2)

我认为常春藤配置说明旨在反映Maven docs中相应的范围说明:

  

<强>提供

     

这很像compile,但表示您希望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此范围仅适用于编译和测试类路径,不可传递

至于ivy如何将此范围转换为常春藤配置映射,我必须下载包含&#34;提供的&#34;的Maven模块。要检查的范围依赖性。

更新

需要记住的是,常春藤会对范围在Maven中的工作方式进行翻译。一个示例模块是:

它的POM包含两个&#34;提供&#34;范围依赖关系,由ivy转换为以下常春藤依赖关系:

<dependency org="org.eclipse.jetty" name="jetty-webapp" ... conf="provided->compile(*),provided(*),runtime(*),master(*)"/>
<dependency org="org.eclipse.jetty.orbit" name="javax.servlet" ... conf="provided->compile(*),provided(*),runtime(*),master(*)"/>

关键是这些依赖关系都没有映射到以下常春藤配置:

  • 默认
  • 编译

这意味着当您声明对jetty-servlets的依赖时,它们不会被作为传递依赖项拉下来。

更新

下载Maven模块时,ivy会在刚性示波器系统与常春藤配置之间进行转换,模拟相同的操作。因此,当您声明以下配置映射&#34;提供 - >默认&#34;在您的模块中,您需要关闭远程模块&#34;编译&#34;依赖于您的本地&#34;提供&#34;配置(&#34;编译&#34;范围是Maven中的默认值,也是常春藤翻译的Maven模块)。

检索遥控器&#34;提供&#34;依赖关系您必须指定&#34;提供 - >提供&#34;,这可能是使用常春藤,但不是Maven模块支持的操作。