我在.NET商店中使用Ant和Ivy进行依赖关系管理,并取得了很大成功,但我无法找到解决此问题的方法。我的问题与具有几个不同配置文件的模块的存储库结构有关(因为缺少更好的术语)。例如,我试图在存储库中设置的模块(它是第三方库Castle)已经针对不同版本的.NET平台进行了编译。此分发版具有以下目录结构:
- net35/CastleCore.dll
- net40客户端配置文件/CastleCore.dll
- sl3/Castle.Core.dll
- sl4/CastleCore.dll
我的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文件?
希望我不必为同一版本库的每个不同编译创建单独的模块。
提前感谢您的帮助。
在ivy中,您可以为模块工件添加额外的属性。
项目设置:
|-- 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"的额外属性
<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>
repository/myorg/Castle/1.0/vivy.xml
额外的属性"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>