Search code examples
gradleartifactory

Publishing Maven artifact to artifactory with different artifact ID


New to Maven Publishing. Our team has started using Artifactory and I'm trying to figure out how to publish to it, but using a custom artifact ID. Here's the relevant part of my build.gradle file

def applicationName = 'example-api'
def applicationVersion = '1.0.0.1'
def group = 'com.example.api'
def archiveName = "${applicationName}##${applicationVersion}"

bootWar {
  archiveFileName = "${archiveName}.war"
}

publishing {
  publications {
    mavenJava(MavenPublication) {
      artifact(file("build/libs/${archiveName}.war"))
      afterEvaluate {
        artifactId archiveName
        groupId group
        version applicationVersion
      }
    }
  }
}

artifactory {
  contextUrl = "http://172.17.0.2:32447/artifactory"
  publish {
    repository {
      repoKey = 'libs-release-local'
      username = 'admin'
      password = 'password1'
      maven = true
    }

    defaults {
      publications('mavenJava')
      publishBuildInfo = true
      publishArtifacts = true
      publishPom = false
    }

  }

  clientConfig.info.setBuildName(applicationName)
  clientConfig.info.setBuildNumber(applicationVersion)
}

But it seems it's never keeps the same name as the WAR file that's produced in the build. This is the closest I've gotten:

enter image description here

Ideally, I'd like to have the artifact be called just 'example-api##1.0.0.1.war' since it will be deployed to Tomcat.

When I try to remove groupId, Artfactory seems unable to create a repo URL, and if I omit the the version, the artifact name is then example-api##1.0.0.1-unspecified.war

Any thoughts?


Solution

  • What you see is the expected behaviour.

    Maven artifact names are strictly <artifactId>-<version>.<extension>. So when you set the publication configuration as follows:

    • artifactId = example-api##1.0.0.1
    • version = 1.0.0.1
    • extension = war

    It results in an artifact named example-api##1.0.0.1-1.0.0.1.war

    I would strongly recommend dropping the version from the artifactId part, to be better aligned with Maven conventions.

    An alternative would be to use an Ivy repository, which has more flexibility around specifying the artifact name.