Details
-
Type:
Improvement
-
Status:
Resolved
-
Resolution: Fixed
-
Affects Version/s: 0.8
-
Fix Version/s: 1.0-milestone-9
-
Gradle Forums topic Reference:
Description
I'm currently writing a JaCoCo gradle plugin and have a dependency on the JaCoCo modules. Unfortunately, the pom for the modules specifies that the jar files have packaging "eclipse-plugin". This appears to translate into a resolved dependency which, when printed, looks like:
[[ResolvedArtifact dependency:org.jacoco:org.jacoco.agent:0.5.6.201201232323;default name:org.jacoco.agent classifier:null extension:eclipse-plugin type:eclipse-plugin]
Dependency resolution then fails with:
Could not resolve all dependencies for configuration ':services:agent:testRuntime'.
Cause: Artifact 'org.jacoco:org.jacoco.agent:0.5.6.201201232323@eclipse-plugin' not found
It seems that, because it is using Ivy under the covers, Gradle is falling victim to IVY-899 .
An example pom from one of the JaCoCo modules:
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.build</artifactId>
<version>0.5.6.201201232323</version>
<relativePath>../org.jacoco.build</relativePath>
</parent>
<artifactId>org.jacoco.report</artifactId>
<packaging>eclipse-plugin</packaging>
<name>JaCoCo :: Report</name>
<description>JaCoCo Reporting</description>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>org.jacoco.core</artifactId>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
</build>
</project>
Is there a workaround available in Gradle (SBT has one for example)?
Activity
| Field | Original Value | New Value |
|---|---|---|
| Component/s | dependencies [ 10022 ] | |
| Priority | Minor [ 4 ] | |
| Affects Version/s | 0.8 [ 10041 ] | |
| Fix Version/s | 1.0-milestone-9 [ 10161 ] | |
| Assignee | Daz DeBoer [ daz ] |
| Labels | dependencies |
| Resolution | Fixed [ 1 ] | |
| Status | Open [ 1 ] | Resolved [ 5 ] |
| Issue Type | Task [ 3 ] | Improvement [ 4 ] |
| Status | Resolved [ 5 ] | Closed [ 6 ] |
| Workflow | jira with pivotal tracker [ 15232 ] | jira with pivotal tracker (no resolved, only closed) [ 18755 ] |
| Status | Closed [ 6 ] | Resolved [ 5 ] |
| Workflow | jira with pivotal tracker (no resolved, only closed) [ 18755 ] | Copy of jira with pivotal tracker (no closed, only resolved) [ 21352 ] |
Your analysis is essentially correct: thanks for pointing out IVY-899. However due to changes required to the pom parsing code, we've already forked the ivy code involved, so we shouldn't need to wait for an ivy fix (we can do it ourselves).
Currently, Gradle has special handling for "pom", "ejb", "bundle" and "maven-plugin"; otherwise we just map the "packaging" value to the extension of the main artifact. Do you have any documentation on what are the allowable packaging values in maven, and how they should be mapped? I can't find anything comprehensive.
A possible workaround would be to use a "Client Module" to declare this dependency: [1]http://gradle.org/docs/current/usergu.... Gradle would then override the published metadata with the dependency metadata declared in your build script. This can be done on a per-dependency basis.
----------------------------------------------------------------------------------------
[1] http://gradle.org/docs/current/userguide/dependency_management.html#sub:client_module_dependencies