常春藤依赖conf映射通配符

时间:2012-09-04 18:37:19

标签: java maven dependencies ivy

在常春藤依赖中,

Q1。 有什么区别

  

CONF = “runtime->编译”

vs

  

CONF = “runtime->编译(*)”

额外的括号内的通配符有什么作用?

Q2。

以下是做什么的?

  

CONF = “&编译期GT;编译(*)”

这不是周期性/自我依赖吗?将conf映射回自身有什么意义?

2 个答案:

答案 0 :(得分:3)

括号为fallback

  

自1.3以来,当您不确定时,可以使用回退机制   依赖将具有所需的conf。你可以向常春藤表明   您想要一个配置,但如果它不存在,请使用另一个配置   一。指定此语法的语法会在其间添加后备conf   在所需的conf之后的括号。例如,

     

test->runtime(default)
  表示在test配置中   模块   runtime
  需要conf的conf,但如果没有   存在,它将使用
  default
  相反。如果默认conf没有   存在然后它将被视为一个错误。请注意   *通配符可用作后备conf。

问题2: conf总是像:

ConfFromThisFile -> ConfFromDependency

所以

compile->compile

会将依赖项的compile配置映射到此文件的compile配置。这不是循环。括号显示:如果依赖项中不存在compile,请使用*

请参阅ivy documentation for dependencies

的配置映射部分

答案 1 :(得分:1)

此语法用于依赖性回退。 runtime->compile表示运行时配置取决于编译配置。编译配置必须存在或Ivy将报告错误。但是,runtime->compile(*)将首先尝试编译配置以满足依赖性。但是如果编译不存在,它将尝试所有其他配置。有关详细信息,请参阅Ivy docs的配置映射部分。

基于此,compile->compile(*)表示编译需要任何(所有?)配置。我猜测compile->(*)不是有效的语法,因此额外的compile保证使用回退,因为直到配置XML节完成后才定义compile

请注意,文档中不清楚(*)是否表示“任何”或“所有”配置。所以,我不确定Ivy是否会停止匹配所有依赖项的第一个配置(如果有的话),或者它是否会引入union中的所有其他配置。