I have an odd issue with consuming published snapshot artifacts from one project, in another project.
In the consuming project i have configured a snapshot repo as follows:
allprojects {
repositories {
maven {
url mavenRepoUrl
mavenContent {
releasesOnly()
}
}
maven {
url mavenSnapshotRepoUrl
mavenContent {
snapshotsOnly()
}
}
}
}
And specific dependency in a sub-module:
dependencies {
implementation(group: 'myproj.common', name: 'common-api', version: '3.5.12-SNAPSHOT') { transitive = false }
}
Running compileJava on this yields:
Execution failed for task ':proj2:submod:compileJava'.
> Could not resolve all files for configuration ':proj2:submod:compileClasspath'.
> Could not find myproj.common:common-api:3.5.12-SNAPSHOT.
Searched in the following locations:
- https://myrepo.local/snapshots/myproj/common/common-api/3.5.12-SNAPSHOT/maven-metadata.xml
- https://myrepo.local/snapshots/myproj/common/common-api/3.5.12-SNAPSHOT/common-api-3.5.12-SNAPSHOT.pom
the maven-metadata.xml should be found (curling the url returns as seen in the following traces)
Here’s a trace from the published project tasks:
> Task :common:common-api:publishMavenPublicationToMavenRepository
Caching disabled for task ':common:common-api:publishMavenPublicationToMavenRepository' because:
Build cache is disabled
Task ':common:common-api:publishMavenPublicationToMavenRepository' is not up-to-date because:
Task has not declared any outputs despite executing actions.
Publishing to repository 'maven' (https://myrepo.local/snapshots/)
Uploading maven-metadata.xml to /snapshots/myproj/common/common-api/3.5.12-SNAPSHOT/maven-metadata.xml
Uploading common-api-3.5.12-20200622.172315-2.jar to /snapshots/myproj/common/common-api/3.5.12-SNAPSHOT/common-api-3.5.12-20200622.172315-2.jar
Uploading common-api-3.5.12-20200622.172315-2.pom to /snapshots/myproj/common/common-api/3.5.12-SNAPSHOT/common-api-3.5.12-20200622.172315-2.pom
Uploading common-api-3.5.12-20200622.172315-2.module to /snapshots/myproj/common/common-api/3.5.12-SNAPSHOT/common-api-3.5.12-20200622.172315-2.module
Uploading maven-metadata.xml to /snapshots/myproj/common/common-api/maven-metadata.xml
:common:common-api:publishMavenPublicationToMavenRepository (Thread[Execution worker for ':',5,main]) completed. Took 5.898 secs.
:common:common-api:publishAllPublicationsToMavenRepository (Thread[Execution worker for ':',5,main]) started.
I see the maven-metadata.xml uploaded is to the artifact folder, not the versioned folder.
The metadata file for the xml looks like this in the local build:
$ cat common/common-api/build/tmp/publishMavenPublicationToMavenRepository/snapshot-maven-metadata.xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
<groupId>myproj.common</groupId>
<artifactId>common-api</artifactId>
<version>3.5.12-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20200622.172315</timestamp>
<buildNumber>2</buildNumber>
</snapshot>
<lastUpdated>20200622172315</lastUpdated>
<snapshotVersions>
<snapshotVersion>
<extension>jar</extension>
<value>3.5.12-20200622.172315-2</value>
<updated>20200622172315</updated>
</snapshotVersion>
<snapshotVersion>
<extension>pom</extension>
<value>3.5.12-20200622.172315-2</value>
<updated>20200622172315</updated>
</snapshotVersion>
<snapshotVersion>
<extension>module</extension>
<value>3.5.12-20200622.172315-2</value>
<updated>20200622172315</updated>
</snapshotVersion>
</snapshotVersions>
</versioning>
</metadata>
But curling that from the repo shows different content (and the task output from the publish didn’t show this file being uploaded anyways):
$ curl https://myrepo.local/snapshots/myproj/common/common-api/3.5.12-SNAPSHOT/maven-metadata.xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
<groupId>myproj.common</groupId>
<artifactId>common-api</artifactId>
<version>3.5.12-SNAPSHOT</version>
<versioning>
<snapshot>
<buildNumber>1</buildNumber>
</snapshot>
<lastUpdated>20200622172321</lastUpdated>
</versioning>
</metadata>
Here’s the associated publish gradle config
$ cat gradle/publish.gradle
apply plugin: 'maven-publish'
publishing {
publications {
maven(MavenPublication) {
from components.java
}
}
repositories {
maven {
credentials {
username "${artifactory_username}"
password "${artifactory_apikey}"
}
if (project.version.endsWith("-SNAPSHOT")) {
url "https://myrepo.local/snapshots/"
} else {
url "https://myrepo.local/prod/"
}
}
}
}
Am i doing anything noticeably wrong here?
$ ./gradlew --version
Using gradle at '/Users/me/workspace/myproj2/gradlew' to run buildfile '/Users/me/workspace/myproj2/build.gradle':
------------------------------------------------------------
Gradle 6.4
------------------------------------------------------------
Build time: 2020-05-05 19:18:55 UTC
Revision: 42f7c3d0c3066b7b38bd0726760d4881e86fd19f
Kotlin: 1.3.71
Groovy: 2.5.10
Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM: 11.0.7 (AdoptOpenJDK 11.0.7+10)
OS: Mac OS X 10.14.5 x86_64