【问题标题】:maven : deploy artifact file namemaven:部署工件文件名
【发布时间】:2013-06-10 14:09:05
【问题描述】:

嗨:我发现默认情况下部署 maven 会更改文件名以匹配版本+工件 ID。例如

部署一个 jar 文件,artifact=A 和 version=V-0.1 将生成一个名为 AV-0.1.jar 的 jar 文件。

有没有办法在部署中更改 jar 文件的默认名称,使其不连接这些字段或明确指定最终部署的 jar 名称?

【问题讨论】:

  • this 问题可能重复。

标签: maven deployment names


【解决方案1】:

复杂的答案:是的

这有点棘手,你需要小心,因为 pom 不会被重写。所以只有 maven 远程存储库(artifactory 或 nexus)会将其放入正确的文件夹结构中。

如果覆盖maven deploy目标中的deploy-file目标,可以覆盖参数:http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html

一个总是将版本 4.5.1 发布到 nexus 的示例如下所示:

        <plugin>
            <artifactId>maven-deploy-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>deploy-file</goal>
                    </goals>
                    <phase>deploy</phase>
                    <configuration>
                        <repositoryId>nexus-site</repositoryId>
                        <url>http://nexus.some.where/nexus-2/content/repositories/releases</url>
                        <file>${build.directory}/${project.build.finalName}.${project.packaging}</file>
                        <generatePom>false</generatePom>
                        <pomFile>pom.xml</pomFile>
                        <version>4.5.1</version>
                    </configuration>
                </execution>
            </executions>
        </plugin>

(在有人问之前,这样做的一个原因是让构建更加 CI 友好。在 CI 中,一切都只是一个构建号,没有真正的“构建发布”,每次签入都会产生一个产品-ready artifact。因此,将 4.5.1 替换为 ${BUILD_NUMBER} 将在您的工件存储中留下许多版本...)

【讨论】:

  • 谢谢!我一直在寻找这个有一段时间了!我剩下的唯一问题是我使用maven-shade-plugin。现在我将两个文件部署到我的目标系统:带有时间戳的旧文件和来自您的解决方案的新文件^^
  • @StefanFalk maven shade 插件的shadedArtifactAttachedshadedClassifierName 选项可能会对您有所帮助。请参阅此示例:maven.apache.org/plugins/maven-shade-plugin/examples/…
  • 这是一个不错的解决方案,但是当我需要处理快照存储库和发布存储库时,我该如何处理呢?
【解决方案2】:

对此的简单回答是:不。

其背后的问题是,如果您更改命名架构,将无法在存储库中找到工件。这就是拥有固定命名架构的原因。

【讨论】:

    【解决方案3】:

    使用 curl 命令行似乎可以为 Nexus 提供任何你想要的东西。

    curl -u<deploymentUser>:<deploymentPassword> --upload-file <someLocalFile> -v http://<nexusServerDNSName>/nexus/content/repositories/<repoPath>/<fileName>
    
    • deploymentUserdeploymentPassword 应取自 ~/.m2/settings.xml。
    • someLocalFile 是你要部署的文件(绝对路径)
    • fileName 是您希望在远程存储库中看到的任意名称(此处不得遵循任何命名约定)

    对我来说,它非常有效。很棒的是它可以在没有 pom.xml 的情况下工作。

    更新:这个答案可能对那些搜索如何绕过 Maven 概念并将任意命名文件部署到 Nexus 的人有用。如果问题是如何使用 Maven 来完成,那么我会同意“不可能”的答案。

    【讨论】:

    • 这有帮助。谢谢。
    【解决方案4】:

    mvn deploy:deploy-file -DartifactId=AAA -Dversion=VVV -Dpackaging=jar

    上面的命令会将文件放在以下结构中。

    AAA
    -VVV
    --AAA_VVV.jar
    

    如果你只是想让创建的文件的名称在连续推送到工件时不同,你可以使用 -Dpackaging 参数。 IE。将值设置为当前时间戳

    mvn deploy:deploy-file -DartifactId=AAA -Dversion=VVV -Dpackaging=2017_01_31_01_37.jar

    AAA
    -VVV
    --AAA_VVV.jar
    --AAA_VVV2017_01_31_01_37.jar
    

    【讨论】:

    • 对于我的快照版本,唯一版本(日期)之后的点仍然存在,并且包装值附加到点。有什么办法可以去掉这个点。我目前得到:AAA_VVV.2017_01_31_01_37.jar 但我想在 VVV 之后删除点。
    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    相关资源
    最近更新 更多