29

我们的内部存储库(Artifactory)现在包含我们内部库的稳定版本和 SNAPSHOT 版本。

对于稳定的构建,从存储库下载任何东西从来没有问题。

但是,当我添加 -SNAPSHOT 时,Maven 声称无法找到依赖项,即使它绝对位于存储库中。

如果我在本地构建和部署依赖项(即到我的本地仓库中)一切正常。

基本上,这有效:

<dependency>
  <groupId>com.example</groupId>
  <artifactId>ourlibrary</artifactId>
  <version>1.0.0</version>
</dependency>

这不会:

<dependency>
  <groupId>com.example</groupId>
  <artifactId>ourlibrary</artifactId>
  <version>1.0.1-SNAPSHOT</version>
</dependency>

即使两个版本都是以相同的方式构建并正确部署(据我所知)到存储库。

错误:

Missing:
----------

1) com.example:ourlibrary:jar:1.0.1-SNAPSHOT,

  Try downloading the file manually from the project website.

  Then, install it using the command:
      mvn install:install-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there:
      mvn deploy:deploy-file -DgroupId=com.example -DartifactId=ourlibrary -Dversion=1.0.1-SNAPSHOT, -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

  Path to dependency:
        1) com.example:product:war:2.0.0-SNAPSHOT
        2) com.example:ourlibrary:jar:1.0.1-SNAPSHOT,

虽然这听起来与这个问题相似,但在那里达成的决议不适用于我的情况。

对此问题的任何见解将不胜感激。

编辑

使用 -X 运行(正如 John V. 建议的那样)揭示了以下内容:

[DEBUG] Skipping disabled repository central
[DEBUG] ourlibrary: using locally installed snapshot
[DEBUG] Skipping disabled repository central
[DEBUG] Using mirror: http://repo.example.com/repo (id: repo.example.com)
[DEBUG] Artifact not found - using stub model: Unable to download the artifact from any repository

  com.example:ourlibrary:pom:1.0.1-SNAPSHOT

from the specified remote repositories:
  repo.example.com (http://repo.example.com/repo)


[DEBUG] Using defaults for missing POM com.example:ourlibrary:pom:1.0.1-SNAPSHOT:compile
[DEBUG]   com.example:ourlibrary:jar:1.0.1-SNAPSHOT:compile (selected for compile)
4

2 回答 2

14

想到了两个想法:

  1. 您的工件的内部存储库中的路径结构不正确。我建议使用 -X 参数运行 maven 命令。它将显示 maven 下载文件的尝试。获取以您的存储库为 url 的行并尝试自己查找它。

    路径应该看起来像

    /com/example/ourlibrary/1.0.1/ourlibrary-1.0.1-SNAPSHOT.jar

  2. 您没有将存储库作为存储库包含在 pom.xml 中
于 2010-11-04T14:30:54.787 回答
13

通常,您有一个与发布 url 不同的快照 url。只是同一存储库中的不同路径,但在 pom.xml 中列为单独的存储库。用于快照的一项需要启用快照,而用于发布的一项需要禁用快照:

<repositories>
        <repository>
            <id>central</id>
            <url>
                http://<releases-url>
            </url>
            **<snapshots>
                <enabled>false</enabled>
            </snapshots>**
        </repository>

        <repository>
            <id>snapshots</id>
            <url>
                http://<snapshots-url>
            </url>
            <snapshots>
                **<enabled>true</enabled>**
                <!-- never, daily, interval:X (where X is in minutes) or always -->
                <!--<updatePolicy>daily</updatePolicy> -->
            </snapshots>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>
于 2010-11-04T15:04:15.737 回答