将 Maven 工件发布到具有不同工件 ID 的工件

Publishing Maven artifact to artifactory with different artifact ID

Maven 发布的新手。我们的团队已经开始使用 Artifactory,我正在尝试弄清楚如何发布到它,但使用自定义工件 ID。这是我的 build.gradle 文件

的相关部分
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)
}

但它似乎永远不会与构建中生成的 WAR 文件保持相同的名称。这是我得到的最接近的:

理想情况下,我希望将工件命名为 'example-api##1.0.0.1.war',因为它将部署到 Tomcat。

当我尝试删除 groupId 时,Artfactory 似乎无法创建 repo URL,如果我省略版本,则工件名称为 example-api##1.0.0.1-unspecified.war

有什么想法吗?

您看到的是预期的行为。

Maven 工件名称严格 <artifactId>-<version>.<extension>。 所以当你设置发布配置如下:

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

它会产生一个名为 example-api##1.0.0.1-1.0.0.1.war

的工件

我强烈建议从 artifactId 部分删除版本,以便更好地与 Maven 约定保持一致。

另一种方法是使用 an Ivy repository,它在指定工件名称方面具有更大的灵活性。