Hi all,
It seems to me, that eclipse plugin doesn't respect the dependencies'
classifier, taking only the last declared dependency for the given
group, artifact id and version.
In a project of mine the build.gradle file contains this dependencies block:
dependencies {
compile 'org.apache.httpcomponents:httpclient:4.0.1'
testCompile 'org.apache.httpcomponents:httpclient:4.0.1:tests'
}
after gradle eclipse
$ cat .classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="output" path="bin"/>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/test/java"/>
[... httpclient deps as commons-logging etc...]
<classpathentry kind="lib"
path="/path/to/.gradle/cache/org.apache.httpcomponents/httpclient/jars/httpclient-4.0.1-tests.jar"
exported="true"/>
</classpath>
If I change to:
dependencies {
compile 'org.apache.httpcomponents:httpclient:4.0.1',
'org.apache.httpcomponents:httpclient:4.0.1:tests'
testCompile 'org.apache.httpcomponents:httpclient:4.0.1',
'org.apache.httpcomponents:httpclient:4.0.1:tests'
}
after gradle eclipse the.classpath file contains only the entry for
'org.apache.httpcomponents:httpclient:4.0.1:tests' (and its
dependencies):
$ cat .classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="output" path="bin"/>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/test/java"/>
[... httpclient deps as commons-logging etc...]
<classpathentry kind="lib"
path="/path/to/.gradle/cache/org.apache.httpcomponents/httpclient/jars/httpclient-4.0.1-tests.jar"
exported="true"/>
</classpath>
if I change the order
dependencies {
compile 'org.apache.httpcomponents:httpclient:4.0.1:tests',
'org.apache.httpcomponents:httpclient:4.0.1'
testCompile 'org.apache.httpcomponents:httpclient:4.0.1:tests',
'org.apache.httpcomponents:httpclient:4.0.1'
}
.classpath contains only the entry for
'org.apache.httpcomponents:httpclient:4.0.1'
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="output" path="bin"/>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/test/java"/>
[...]
<classpathentry kind="lib"
path="/path/to/.gradle/cache/org.apache.httpcomponents/httpclient/jars/httpclient-4.0.1.jar"
exported="true"/>
</classpath>
A workaround is to use the @jar notation but this way you have to
specify "transitive=true" to have httpclient dependencies entries.
dependencies {
compile 'org.apache.httpcomponents:httpclient:4.0.1@jar'
testCompile 'org.apache.httpcomponents:httpclient:4.0.1:tests@jar'
}
after gradle eclipse (note no httpclient dependency has entry):
$ cat .classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="output" path="bin"/>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/test/java"/>
<classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER" exported="true"/>
<classpathentry kind="lib"
path="/path/to/.gradle/cache/org.apache.httpcomponents/httpclient/jars/httpclient-4.0.1-tests.jar"
exported="true"/>
<classpathentry kind="lib"
path="/path/to/.gradle/cache/org.apache.httpcomponents/httpclient/jars/httpclient-4.0.1.jar"
exported="true"/>
</classpath>
I've the expected result using:
dependencies {
compile ('org.apache.httpcomponents:httpclient:4.0.1@jar') {
transitive = true
}
testCompile 'org.apache.httpcomponents:httpclient:4.0.1:tests@jar'
}
$ cat .classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="output" path="bin"/>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/test/java"/>
<classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER" exported="true"/>
<classpathentry kind="lib"
path="/path/to/.gradle/cache/commons-codec/commons-codec/jars/commons-codec-1.3.jar"
exported="true"/>
<classpathentry kind="lib"
path="/path/to/.gradle/cache/org.apache.httpcomponents/httpcore/jars/httpcore-4.0.1.jar"
exported="true"/>
<classpathentry kind="lib"
path="/path/to/.gradle/cache/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar"
exported="true"/>
<classpathentry kind="lib"
path="/path/to/.gradle/cache/org.apache.httpcomponents/httpclient/jars/httpclient-4.0.1-tests.jar"
exported="true"/>
<classpathentry kind="lib"
path="/path/to/.gradle/cache/org.apache.httpcomponents/httpclient/jars/httpclient-4.0.1.jar"
exported="true"/>
</classpath>
Is this behaviour correct and am I missing something obvious?
Thanks,
Enrico
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email