On Feb 24, 2009, at 10:05 PM, Galder Zamarreno wrote:
Hi Hans,
First of all, thanks very much for your help with this.
Hans Dockter wrote:
On Feb 17, 2009, at 8:24 PM, Galder Zamarreno wrote:
Hi,
Hello to every Gradle user. This is my first ever post to this
list. I
have a question:
Even though Eclipse classpath sourcepath attribute generation has
not
been implemented yet, I wondered whether it's possible to download
the
corresponding "*-sources.jar" from a maven repository using
gradle. I
suppose this is something that Gradle should optionally request via
Ivy but looking at the code, I couldn't figure out how to do this
and
couldn't find an example in the user list either.
Using a classifier should work:
For example:
"junit:junit:4.4:sources"
I'm a bit confused here. If I do the following:
compile "junit:junit:4.4"
The JUnit test classes are added compiled fine.
If I use compile "junit:junit:4.4:sources", gradle adds the sources
to the classpath but not the actual compiled jar, hence compilation
fails.
If I add:
compile "junit:junit:4.4"
compile "junit:junit:4.4:sources"
It only uses sources for compilation and it fails :(
Am I missing something obvious? I want compilation to work and
download the sources at the same time.
It is possible.
There is the following logic behind your problems above. In Gradle
(and Ivy) a dependency is defined by its group, name and version. You
can't assign multiple dependencies which have similar values for those
properties (actually you can, but then only on gets resolved).
We distinguish between module and artifacts. A module can have
multiple artifacts. If you don't specify an artifacts, Gradle assumes
that the artifacts is of type jar and has the same name as the module.
So compile "junit:junit:4.4" declares a module "junit:junit:4.4". As
you don't have specified any artifacts, we assume this module has one
artifact, that is junit-4.4.jar. If you declare "junit:junit:
4.4:sources", Gradle creates a module and under the hood adds an
artifact junit-4.4-sources.jar. Adding and artifacts deactivates the
implicit default artifact. But you can add more than one artifact:
compile "junit:junit:4.4:sources" {
addArtifact(new Artifact('junit','jar','jar', null, null))
}
This should do the job. I had no time to try this out myself though.
Two things strike me as an improvement. Our DSL should provide a
notation for creating artifacts instead of using 'new Artifact()'. And
we should not rely on the implicit artifact, but should always add the
artifact explicitly. Right now this should not work (it should only
download the sources):
compile "junit:junit:4.4" {
addArtifact(new Artifact('junit','jar','jar', 'sources', null))
}
- Hans
- Hans
Thanks very much in advance.
Regards,
--
Galder ZamarreƱo
http://galder.zamarreno.com
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
--
Hans Dockter
Gradle Project lead
http://www.gradle.org
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
--
Galder ZamarreƱo
http://galder.zamarreno.com
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
--
Hans Dockter
Gradle Project lead
http://www.gradle.org
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email