ivysettings.xml:添加本地Maven路径

25
如何在ivysettings.xml中添加本地路径(而非URL)?我需要将我的Maven本地仓库(/Users/me/.m2/repository)添加到其中。谢谢。
4个回答

33

尝试使用以下ivysettings.xml文件:

<ivysettings>
    <settings defaultResolver="default"/>
    <property name="m2-pattern" value="${user.home}/.m2/repository/[organisation]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]" override="false" />
    <resolvers>
        <chain name="default">
            <filesystem name="local-maven2" m2compatible="true" >
                <artifact pattern="${m2-pattern}"/>
                <ivy pattern="${m2-pattern}"/>
            </filesystem>
            <ibiblio name="central" m2compatible="true"/>
        </chain>
    </resolvers>
</ivysettings>

如果本地Maven仓库缺少依赖项,它将包含Maven中央存储库。

注意:

重复使用本地Maven仓库的好处有限。Ivy会缓存从仓库获取的JAR文件。


3
考虑在Ivy模式中强制使用.pom扩展名,就像这里建议的那样。这样做可以触发Ivy的POM转换逻辑,如果您需要引用合成配置(例如 master),则非常相关。 - mephi42
@mephi42 我之前不知道,真不错!在我看来,使用Maven本地仓库是个坏主意。它更像一个缓存。最好的做法是配置Ivy和Maven从同一个远程仓库拉取依赖! - Mark O'Connor

3

Ivy的依赖关系是通过“解析器”来解决的。

这个页面非常适合理解它们的基本工作原理。

http://ant.apache.org/ivy/history/latest-milestone/settings/resolvers.html

具体而言:如何“解析”本地maven存储库?

Ivy有一个“FileSystemResolver”,它不是采用Web地址,而是可以从本地根路径解析。请注意,当事情变得复杂时,会有一些陷阱,比如这个:http://ant.apache.org/ivy/history/latest-milestone/settings/resolvers.html。解析器类似于maven Repository标签,因为它们定义了资源。

一个快速的建议

请记住,一旦您自定义了ivysettings.xml,如果您正在使用IDE,则必须告诉它明确地使用您的ivysettings.xml文件,而不是某些内部默认设置。


2
我发现在最近版本的sbt中,你可以这样做:
sbt publish-m2

太棒了,使用这个命令如何修改Maven存储库的位置? - Brian Topping
'sbt publish-m2' 将发布到 ~/.m2 目录。这是您要求的吗? - Always Asking
谢谢@Always,我试图理解为什么SBT没有关注settings.xml中的<localRepository> - Brian Topping
这对我来说是sbt publishM2。 - alex

0
在0.13.7之前,SBT忽略了Maven的settings.xml文件中的设置。请参见https://github.com/sbt/sbt/issues/1589。在某些情况下,这将避免在使用publish-m2时需要更改ivysettings.xml文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接