我正在使用Ant和Ivy在.NET商店中进行依赖关系管理并取得了很大成功,但我无法找到解决此问题的方法。我的问题涉及具有多个不同配置文件的模块的存储库结构(缺少 一个更好的术语)。例如,我试图在存储库中设置的模块(它是第三方库 - Castle)已经针对不同版本的.NET平台进行了编译。此分发具有以下目录结构:
我的ivysettings.xml文件的文件解析器设置如下:
<filesystem name="fs.resolver" cache="nn.repo.cache">
<ivy pattern="${repository.dir}/[organisation]/[module]/[shortRevision]/[revision]/ivy.xml" />
<artifact pattern="${repository.dir}/[organisation]/[module]/[shortRevision]/[revision]/[artifact].[ext]" />
</filesystem>
起初,我认为可以使用配置,但没有 取得很大进展。如何在Ivy.xml文件中多次指定具有相同名称的工件?我认为你不能。另外,如果我在存储库中添加子目录,我会 必须修改ivysettings.xml中的工件模式吗?
Ivy建议使用此模块的建议方法是什么? 这个模块的Ivy.xml文件是什么样的?怎么会 需要为此修改ivysettings.xml文件吗?
希望我不必为同一版本的库的每个不同编译创建单独的模块。
提前感谢您的帮助。
答案 0 :(得分:3)
在常春藤中,您可以将extra attributes添加到模块工件中。
项目设置:
|-- build.xml
|-- ivysettings.xml
|-- ivy.xml
`-- repository
`-- myorg
`-- Castle
`-- 1.0
|-- ivy.xml
|-- net35
| `-- Castle.Core.dll
|-- net40clientprofile
| `-- Castle.Core.dll
|-- sl3
| `-- Castle.Core.dll
`-- sl4
`-- Castle.Core.dll
<强>的ivy.xml 强>
使用配置映射选择要下载的工件:
<ivy-module version="2.0">
<info organisation="org.demo" module="demo"/>
<dependencies>
<dependency org="myorg" name="Castle" rev="1.0" conf="default->net35"/>
</dependencies>
</ivy-module>
<强> ivysettings.xml 强>
工件模式包含名为“profile”的extra attribute
<ivysettings>
<settings defaultResolver="local"/>
<resolvers>
<filesystem name="local">
<ivy pattern="${ivy.settings.dir}/repository/[organisation]/[module]/[revision]/ivy.xml" />
<artifact pattern="${ivy.settings.dir}/repository/[organisation]/[module]/[revision]/[profile]/[artifact].[ext]" />
</filesystem>
</resolvers>
</ivysettings>
<强>库/ MYORG /城堡/ 1.0 /的ivy.xml 强>
extra attribute“profile”用于区分模块中的工件。这些配置用于启用客户端模块的配置映射。
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<info organisation="myorg" module="Castle" revision="1.0" status="release"/>
<configurations>
<conf name="net35"/>
<conf name="net40clientprofile"/>
<conf name="sl3"/>
<conf name="sl4"/>
</configurations>
<publications>
<artifact name="Castle.Core" type="dll" e:profile="net35" conf="net35"/>
<artifact name="Castle.Core" type="dll" e:profile="net40clientprofile" conf="net40clientprofile"/>
<artifact name="Castle.Core" type="dll" e:profile="sl3" conf="sl3"/>
<artifact name="Castle.Core" type="dll" e:profile="sl4" conf="sl4"/>
</publications>
</ivy-module>