我有一个包含多个已发布工件的常春藤存储库,如下所示:
/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>
答案 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”}