我以为我不需要问这个,但是我没有任何进展。
这个问题的解决方案:
How are maven scopes mapped to ivy configurations by 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
如答案中所述,特殊的“主”配置仅包含此模块本身发布的工件,没有传递依赖项:
这意味着不需要“transitive = false”属性。
更新
您如何使用配置取决于您。第一种方法比较简单,但是我更喜欢第二种方法,因为我的配置报告与我的类路径内容匹配
选项1
您可以按如下方式创建单个类路径:
<ivy:cachepath pathid="compile.path" conf="compile,provided"/>
然后可以在javac任务中使用它,如下所示:
<javac ... classpathref="compile.path">
..
选项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>
我认为这明确说明了您如何使用此特殊提供的范围,但这确实取决于您。
关于ivy - 如何在IVY中复制没有提供库的运行时库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11723865/