当我第一次开始使用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存储库交互的方式使其不可传递?或者,这是一个小的故障,每个人都从一个博客复制到另一个博客?
答案 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模块支持的操作。