Gradle:只检索多个已发布工件中的一个?

时间:2013-12-30 17:10:54

标签: gradle

我有一个包含多个已发布工件的常春藤存储库,如下所示:

/mygroup/mymodule/1.1.1/mymodule-1.1.1.jar
/mygroup/mymodule/1.1.1/mymodule-client-1.1.1.jar
/mygroup/mymodule/1.1.1/ivy-1.1.1.xml

如果我输入以下gradle依赖关系行,它将检索两个jar。我想只检索mymodule-client.jar,但我无法弄清楚这项工作的咒语。这是我现在的路线。由于其他原因,我故意排除了传递依赖。

compile ('mygroup:mymodule:1.1.11') {transitive=false}

Gradle文档似乎表明有一种方法可以获得一个特定的工件,但我无法使咒语正确。

这是常春藤文件的内容。为简洁起见,仅更改了模块/工件名称并删除了一些标准依赖项。

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">

    <info organisation="mygroup" module="mymodule" revision="1.1.1" status="integration" publication="20120111091627"/>

    <publications>
        <artifact name="mymodule"/>
        <artifact name="mymodule-client"/>
    </publications>

    <dependencies> 
       ...          
    </dependencies>
</ivy-module>

2 个答案:

答案 0 :(得分:2)

Ivy模块描述符不会将工件分配给不同的配置,因此无法独立检索它们。如果你想要的只是将两个工件中的一个放在编译类路径上,那么类似下面的东西应该可以工作:

configurations {
    mymodule
}

dependencies {
    mymodule 'mygroup:mymodule:1.1.1'
    compile configurations.mymodule.filter { it.name == 'mymodule-client-1.1.1.jar' } 
}

答案 1 :(得分:2)

经过大量试验和错误后管理找到合适的行:

compile ('mygroup:mymodule:1.1.1:client@jar')

我认为它只能起作用,因为“客户端”是模块名称的扩展名(显然称为分类器)。如果我有不同的名字,我不确定我是如何解决它的。

我找到了一个给我线索的例子: http://scratchpad.pietschy.com/gradle/dependency_management.html

  

20.2.2.2。仅限工件表示法仅工件表示法创建模块依赖项,该依赖项仅下载一个工件文件。符号   对于这样的依赖关系遵循以下模式:   [组]:[神器]:[版本] @ [扩展名]或   [组]:[工件]:[版本]:[分级] @ [延伸]。例如:

     

依赖{       编译“org.apache.ant:ant-junit:1.7.0@jar”}