5

据我所知,使用 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,此部署命令失败并显示错误消息。

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

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

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

4

2 回答 2

7

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页面。

于 2012-07-10T08:24:11.467 回答
4

作为一个直接而简短的答案:添加第三方要求您拥有:

  • 一个 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 做某事时,通常是因为这不是做这件事的好方法,甚至您的流程也比应该驱动每个人的“最伟大的开发流程”小得多:)

于 2012-07-10T12:22:58.700 回答