Reputation: 5875
I've got an Ivy repository with multiple published artifacts, something like this:
/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
If I put in the following gradle dependency line, it retrieves both jars. I want to only retrieve the mymodule-client.jar, but I can't figure out the incantation to make that work. Here's the line I have now. I've purposefully excluded transitive dependencies for other reasons.
compile ('mygroup:mymodule:1.1.11') {transitive=false}
Gradle docs seem to indicate there's a way to get just a specific artifact, but I can't get the incantation correct.
Here's the contents of the ivy file. Only the module/artifact names were changed and some standard dependency stuff removed for brevity.
<?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>
Upvotes: 3
Views: 2517
Reputation: 123910
The Ivy module descriptor doesn't assign the artifacts to different configurations, hence it's not possible to retrieve them independently. If all you want is to only put one of the two artifacts on the compile class path, something like the following should work:
configurations {
mymodule
}
dependencies {
mymodule 'mygroup:mymodule:1.1.1'
compile configurations.mymodule.filter { it.name == 'mymodule-client-1.1.1.jar' }
}
Upvotes: 2
Reputation: 5875
Managed to find the appropriate line after a lot of trial and error:
compile ('mygroup:mymodule:1.1.1:client@jar')
I think it only works because the "client" is an extension of the module name (called a classifier apparently). If I'd had something named differently, I'm not sure how I'd have resolved it.
I found the example that gave me the clue here: http://scratchpad.pietschy.com/gradle/dependency_management.html
20.2.2.2. Artifact only notation An artifact only notation creates a module dependency which only downloads one artifact file. The notation for such a dependency follows the pattern: [group]:[artifact]:[version]@[extension] or [group]:[artifact]:[version]:[classifier]@[extension]. For example:
dependencies { compile "org.apache.ant:ant-junit:1.7.0@jar" }
Upvotes: 2