在两个单独的lib目录中拆分检索到的工件

时间:2010-11-01 16:42:10

标签: ivy

在我的Web应用程序中,有两个单独的lib目录:

  • /lib
  • /web/webroot/WEB-INF/lib

背后的想法是后者中的库仅由前端代码使用,第一个中的库由两者前端和业务逻辑代码使用。有一个类加载器,它允许业务逻辑代码看到/ web / webroot / WEB-INF / lib中的jar。

我怎么能告诉ivy某些依赖项应该转到第二个目录而其他所有依赖项都转到第一个目录?

由于Web类加载器可以在两个目录中看到jar,而且我不希望jar存在于两个目录中,所以这并不是很简单。

1 个答案:

答案 0 :(得分:15)

配置用于创建依赖项的逻辑分组:

<强>的ivy.xml

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="demo"/>
    <configurations>
        <conf name="frontEnd" description="Jars used by front end"/>
        <conf name="businessLogic" description="Jars used for business logic"/>
    </configurations>
    <dependencies>
        <dependency org="commons-lang"    name="commons-lang"    rev="2.5"   conf="businessLogic->default"/>
        <dependency org="commons-codec"   name="commons-codec"   rev="1.4"   conf="businessLogic->default"/>
        <dependency org="commons-cli"     name="commons-cli"     rev="1.2"   conf="frontEnd->default"/>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1" conf="frontEnd->default"/>
    </dependencies>
</ivy-module>

常春藤检索 ant任务可以使用这些配置来填充您的目录:

<强>的build.xml

<target name="init" description="--> retrieve dependencies with ivy">
    <ivy:retrieve conf="businessLogic" pattern="lib/[artifact].[ext]"/>
    <ivy:retrieve conf="frontEnd" pattern="web/webroot/WEB-INF/lib/[artifact].[ext]"/>
</target>

示例

$ find . -type f
./build.xml
./ivy.xml
./lib/commons-lang.jar
./lib/commons-codec.jar
./web/webroot/WEB-INF/lib/commons-cli.jar
./web/webroot/WEB-INF/lib/commons-logging.jar