Maven 3:使用SCP部署工件

时间:2012-07-10 08:12:01

标签: maven scp

据我所知,使用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.jarwagon-ssh-external1.0.jar复制到我的$M2_HOME/lib目录。

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

(如果有可能的话,怎么做呢?)

2 个答案:

答案 0 :(得分:7)

货车是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页。

答案 1 :(得分:4)

作为直接和简短的回答 :添加第三方要求您拥有:

  • Maven Repository(像Nexus这样的应用程序或带有GUI的Artifactory)
  • 或pom.xml(在命令行中)

进一步注意事项

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

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

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

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

    • 谁开发了它?
    • 它依赖于什么(其他库)?
    • 谁提供它?
    • 是值得信赖的吗?
    • ...
  4. 所有这些信息都应该放在pom.xml中,它们实际上是由作者放置的(见1),或者至少在Maven中使用时提供(见2)。在所有情况下,它们都来自pom.xml ...是否自动生成...所以你需要一个pom.xml :)。


    实际上,发布或使用库会导致同样的问题:您必须提供有关您的开发的信息,以便以更自动化和可信任的方式使用。 它有时候很难看,但这是更好的方法。

    如果这听起来很明显,请再次原谅我。但是根据经验,当你没有设法用Maven做某事时,通常是因为这不是很好的方法,即使你的过程比“最伟大的开发过程”要小得多,每个人都应该开车:)

相关问题