I am struggling with sharing artifacts between multiple projects on my machine using Gradle 2.3.
My first project has three sub-projects; common, client and server. I want to publish the code, source and java docs of the common and client sub-projects to my local repository so they can be included in my second project. I have a couple issues. I can publish the snapshot with time stamps in the file names but the other project does not pick them. The java docs has multiple index.hmtl files instead of being merged.
Here is the some of build.gradle script from the first project with three sub-projects.
apply plugin: 'java'
project(':contact-service-common') {
}
project(':contact-service-client') {
apply plugin: 'maven'
dependencies {
compile project(':contact-service-common')
compile("org.springframework.cloud:spring-cloud-starter-eureka:${springCloudVersion}")
}
jar {
from files(
project(':contact-service-common').sourceSets.main.output
)
}
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from files(
sourceSets.main.allSource,
project(':contact-service-common').sourceSets.main.allSource
)
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from(
javadoc.destinationDir,
project(':contact-service-common').javadoc.destinationDir
)
}
artifacts {
archives jar
archives sourcesJar
archives javadocJar
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://${System.properties['user.home']}/.m2")
}
}
}
}
The published artifacts are almost what I was expecting. The classes jar and the sources jar contain the files from both the common and the client sub-projects. The javadoc jar contains the javadocs of both projects but multiple index.html and other root files. I would like one index.html that combines the two sub-projects.
ls ~/.m2/repository/com/wstrater/contact-service-client/0.0.1-SNAPSHOT/contact-service-client-0.0.1-20150508.150127-11*
~/.m2/repository/com/wstrater/contact-service-client/0.0.1-SNAPSHOT/contact-service-client-0.0.1-20150508.150127-11.jar
~/.m2/repository/com/wstrater/contact-service-client/0.0.1-SNAPSHOT/contact-service-client-0.0.1-20150508.150127-11-javadoc.jar
~/.m2/repository/com/wstrater/contact-service-client/0.0.1-SNAPSHOT/contact-service-client-0.0.1-20150508.150127-11.pom
~/.m2/repository/com/wstrater/contact-service-client/0.0.1-SNAPSHOT/contact-service-client-0.0.1-20150508.150127-11-sources.jar
jar -tvf ~/.m2/repository/com/wstrater/contact-service-client/0.0.1-SNAPSHOT/contact-service-client-0.0.1-20150508.150127-11-javadoc.jar | grep "index\.html"
2595 Fri May 08 11:01:26 EDT 2015 index.html
2686 Fri May 08 11:01:24 EDT 2015 index.html
The next problem is I can not include the client jar in another project.
Here some of the build.gradle of the other project.
subprojects {
apply plugin: "java"
sourceCompatibility = 1.7
targetCompatibility = 1.7
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile("com.wstrater:contact-service-client:${version}")
}
}
project(':passport-service-client') {
dependencies {
compile project(':passport-service-common')
}
jar {
from files(
project(':passport-service-common').sourceSets.main.output
)
}
}
I get the following error.
./gradlew clean test
:passport-service-client:clean UP-TO-DATE
:passport-service-common:clean UP-TO-DATE
:passport-service-server:clean UP-TO-DATE
:passport-service-common:compileJava
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all dependencies for configuration ':passport-service-common:compile'.
> Could not find com.wstrater:contact-service-client:0.0.1-SNAPSHOT.
Required by:
com.wstrater:passport-service-common:0.0.1-SNAPSHOT
The Maven metadata lookls like it references the correct jar files.
cat ~/.m2/repository/com/wstrater/contact-service-client/0.0.1-SNAPSHOT/maven-metadata-remote.xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.wstrater</groupId>
<artifactId>contact-service-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20150508.150127</timestamp>
<buildNumber>11</buildNumber>
</snapshot>
<lastUpdated>20150508150127</lastUpdated>
</versioning>
</metadata>
I am new to Gradle and Groovy and would be appreciated any help. My searches have found snippets of build script but I have not found an complete end-to-end example.
Wes.