【问题标题】:Maven 3: deploying an artifact using SCPMaven 3:使用 SCP 部署工件
【发布时间】:2012-07-09 16:25:03
【问题描述】:

据我所知,使用 maven 部署第三方二进制工件是这样完成的:

mvn deploy:deploy-file -DgroupId=<group-id> \
  -DartifactId=<artifact-id> \
  -Dversion=<version> \
  -Dpackaging=<type-of-packaging> \
  -Dfile=<path-to-file> \
  -DrepositoryId=<id-to-map-on-server-section-of-settings.xml> \
  -Durl=<url-of-the-repository-to-deploy>

假设我的存储库可以使用 scp 访问,例如在上面的命令中

-Durl=scpexe://example.org//users/mvnrepo/maven

使用 maven 3,此部署命令失败并显示错误消息。

我使用的解决方法是将两个 jar:wagon-ssh-common-2.2.jar 和 wagon-ssh-external1.0.jar 复制到我的 $M2_HOME/lib 目录。

因此我的问题是:为什么 Maven 不能自己检索合适的货车?

(如果可能的话,如何让它做到这一点?)

【问题讨论】:

    标签: maven scp


    【解决方案1】:

    Wagons 是 Maven 扩展。您可以按如下方式添加它们:

    <project>
        <build>
            <extensions>
                <extension>
                    <groupId>org.apache.maven.wagon</groupId>
                    <artifactId>wagon-ssh</artifactId>
                    <version>1.0</version>
                </extension>
            </extensions>
        </build>
    </project>
    

    更多详情可以查看Maven Wagon页面。

    【讨论】:

    • 好的,但是对于快速的第 3 方二进制部署,我希望我不需要创建 POM 文件。可以将其添加到全局设置文件或类似文件中吗?
    • 如果您使用的是 Nexus,您可以通过网络应用上传文件。
    【解决方案2】:

    直截了当:添加第三方需要您:

    • Maven 存储库(如 Nexus 或带有 GUI 的 Artifactory 等应用)
    • 或 pom.xml(在命令行中)

    进一步考虑

    我假设您想使用第三方库,而不仅仅是发布您自己的库。

    1. 如果您想使用第三方库,您确实应该寻找托管它的现有存储库。我很确定您已经搜索过,但这是更好的方法。如果你找到了,只需将它添加到你的 maven repo 缓存中。

    2. 接下来,如果你没有找到,你可以将它添加到你自己的 repo 中,假设你已经打开了。我真的不知道你是否熟悉这个,这听起来很明显,所以请原谅我。但是存储库不仅是文件服务器。 Carlspring kinldy 谈到 Nexus 是为了举例。还有 Artifactory 等等。它们是真正的应用服务器。所以,你必须有自己的。 它们具有允许您添加工件的接口,并提供有关它的一些信息(至少是组、ID、版本)。

    3. 最后,Maven 处理依赖范式。这不是正式的,只是考虑的部分:

      • 是谁开发的?
      • 它依赖于什么(其他库)?
      • 谁提供?
      • 可信吗?
      • ...

    所有这些信息都应该放在 pom.xml 中,它们确实是作者放置的(见 1),或者至少在您在 Maven 中使用时提供(见 2)。在所有情况下,它们都来自 pom.xml ......是否自动生成......所以你需要一个 pom.xml :)。


    确实,发布或使用库会导致相同的问题:您必须提供有关您开发的内容的信息,以便以更加自动化和可信赖的方式使用。 有时它很丑陋,但这是更好的方法。

    再一次,如果这听起来很明显,请原谅我。但是根据经验,当您无法使用 Maven 做某事时,通常是因为这不是做这件事的好方法,甚至您的流程也比应该驱动每个人的“最伟大的开发流程”小得多:)

    【讨论】:

    • 我同意 Jean-Rémy 的观点,还有其他 Maven 存储库,例如 Archiva 和 Artifactory。我只是举了一个这样的例子——Nexus。
    • 我改写了我写的 carlspring 的内容。我的意图不是减少你所说的。 :) 我明白你的意思:)
    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多