webakaunt
(my accounts)
November 1, 2011, 6:55pm
1
GradleCrew,
I have two projects: A and B.
Project A depends on ZeroMQ jar ( and many other jars, but let’s take one as an example )
Project A is built, uploadArchives to nexus repo as a snapshot ( projectA-0.0.1.BUILD-SNAPSHOT )
Project B depends on project A as a JAR => “projectA-0.0.1.BUILD-SNAPSHOT.jar”
Project B is runnable, hence it’d need all the A’s dependencies to run succesfully
How do I make Project B pull all the A’s dependencies?
Things I tried in Project B:
allprojects {
configurations.all {
transitive = true
}
}
runtime( 'org.xyz:projectA:0.0.1.BUILD-SNAPSHOT' ) { transitive = true }
and many other things.
Thank you!
In general ( as a side feedback ): it would be a lot easier to have a short and concise summary of all the “most/frequently used” options / Gradle variables, as oppose to have it spread out over the long guide. But that is besides the point.
How do I make Project B pull all the A’s dependencies?
What exactly do you mean by that? If you declare a dependency on A, you will automatically get A’s dependencies as well. Try:
dependencies {
compile 'org.xyz:projectA:0.0.1.BUILD-SNAPSHOT'
}
task printDeps << {
configurations.compile.each { println it }
}
webakaunt
(my accounts)
November 2, 2011, 1:48pm
3
@Peter ,
That was my understanding too. But all I get is:
$ gradle printDeps
:printDeps
/Users/user/.gradle/cache/org.xyz/projectA/jars/projectA-0.0.1.BUILD-SNAPSHOT.jar
BUILD SUCCESSFUL
Total time: 8.252 secs
While in nexus repo, where project B is pulling project A from, I can look at project’s A POM and see many dependencies.
What is interesting, once the project A gets pulled into Gradle cache, I can’t see any of its dependencies in ivy.xml:
$ cat ~/.gradle/cache/org.xyz/projectA/ivy-0.0.1.BUILD-SNAPSHOT.xml
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0">
<info organisation="org.xyz"
module="projectA"
revision="0.0.1.BUILD-SNAPSHOT"
status="release"
publication="20111101200417"
default="true"
/>
<configurations>
<conf name="default" visibility="public"/>
</configurations>
<publications>
<artifact name="projectA" type="jar" ext="jar" conf="default"/>
</publications>
</ivy-module>
My guess is that for some reason, project A’s pom.xml isn’t found and a default ivy.xml created. What does your ‘repositories’ section look like?
webakaunt
(my accounts)
November 3, 2011, 5:19am
5
for project B? Here it is:
repositories {
mavenCentral()
mavenRepo urls: ["http://repository.jboss.org/nexus/content/groups/public/",
"http://host/nexus/content/groups/public/",
"http://host/nexus/content/repositories/snapshots/",
"http://scala-tools.org/repo-releases/",
"http://nexus.scala-tools.org/content/repositories/snapshots/",
"http://repo.typesafe.com/typesafe/releases/"]
}
Passing multiple URLs to ‘mavenRepo’ has a very special meaning. (It’s a common pitfall, and that’s why we have changed the DSL in milestone-5). Change it to:
repositories {
mavenCentral()
mavenRepo urls: "http://repository.jboss.org/nexus/content/groups/public/"
mavenRepo urls: "http://host/nexus/content/groups/public/"
mavenRepo urls: "http://host/nexus/content/repositories/snapshots/"
mavenRepo urls: "http://scala-tools.org/repo-releases/"
mavenRepo urls: "http://nexus.scala-tools.org/content/repositories/snapshots/"
mavenRepo urls: "http://repo.typesafe.com/typesafe/releases/"
}
This will very likely solve the problem.
webakaunt
(my accounts)
November 3, 2011, 1:44pm
7
hm… so it seems that with a repository list a POM is only looked up in the first repository entry. I see… well that was not so obvious
Thanks Peter!
webakaunt
(my accounts)
January 31, 2012, 9:35pm
8