有没有办法让Maven自动下载快照版本?

时间:2011-10-10 14:08:01

标签: java maven-2 maven snapshot

所以我有一个项目取决于另一个项目的快照版本。依赖性是:

<dependency>
  <groupId>org.oop</groupId>
  <artifactId>oop</artifactId>
  <version>0.9.9-SNAPSHOT</version>
</dependency>

对于oop项目,我确实进行了“mvn clean deploy”,因此快照版本应该位于maven中央存储库中的某个位置。但是当我进行mvn clean安装时,上面的快照依赖关系无法解决,我得到了这个:

缺失:

1)org.oop:oop:jar:0.9.9-SNAPSHOT

尝试从项目网站手动下载文件。

然后,使用以下命令安装它:       mvn install:install-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile = / path / to / file

或者,如果您拥有自己的存储库,则可以在那里部署文件:       mvn deploy:deploy-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile = / path / to / file -Durl = [url] -DrepositoryId = [id] < / p>

有没有办法让maven自动下载快照?我必须在这里遗漏一些东西。

EDIT1:在我的settings.xml上,我有:

   <server>
      <id>sonatype-nexus-snapshots</id>
      <username>XXXXXX</username>
      <password>XXXXXX</password>
    </server>

    <server>
      <id>sonatype-nexus-staging</id>
      <username>XXXXXX</username>
      <password>XXXXXX</password>
    </server>

EDIT2: enter image description here

7 个答案:

答案 0 :(得分:19)

Maven会尝试自动下载快照,实际上也是如此(正如您的错误所示)。默认情况下,Maven将每天查找一次较新的快照版本,但您可以在快照存储库配置中更改该时间间隔(例如,在settings.xml中):

<updatePolicy>interval:5</updatePolicy>

这将使maven每隔5分钟检查一次(如果你经常建立)。或者,您可以使用-U--update-snapshots选项手动强制检查。

但是,它无法找到依赖项。你能为快照依赖发布你的repo设置和工件配置吗?

您的存储库中是org.oop:oop:jar:0.9.9-SNAPSHOT工件吗?

  

...所以快照版本应该在maven中央存储库中的某个位置。

不,不是。我试着查一查,但找不到它。 Afaik,有一些升级机制,所以也许你的设置是错的。但通常情况下,正如其他人已经说过的那样,您可以使用自己的存储库管理器,例如Artifactory或Nexus。

答案 1 :(得分:19)

只需将其添加到〜/ .m2 / settings.xml:

<profiles>
  <profile>
     <id>allow-snapshots</id>
        <activation><activeByDefault>true</activeByDefault></activation>
     <repositories>
       <repository>
         <id>snapshots-repo</id>
         <url>https://oss.sonatype.org/content/repositories/snapshots</url>
         <releases><enabled>false</enabled></releases>
         <snapshots><enabled>true</enabled></snapshots>
       </repository>
     </repositories>
   </profile>
</profiles>

答案 2 :(得分:17)

要更新快照,请尝试使用-U选项

-U,--update-snapshots                  Forces a check for updated
                                       releases and snapshots on remote
                                       repositories

然而,你说:

  

我确实做了'mvn clean deploy',因此快照版本应该位于maven中央存储库中的某个位置。

这是不可能的,你的快照正在其他地方。如果我在没有配置我的个人存储库的情况下执行mvn clean deploy,我会得到:

  

部署失败:未在分配管理元素中的POM或-DaltDeploymentRepository = id :: layout :: url参数

中指定存储库元素

要启用部署,可以在pom.xml中添加一些配置,例如:

<distributionManagement>

    <!-- Publish versioned releases here -->
    <repository>
        <id>myrepo</id>
        <name>My releases</name>
        <url>http://nexus.mycompany.com/nexus/content/repositories/releases</url>
    </repository>

    <!-- Publish snapshots here -->
    <snapshotRepository>
        <id>myrepo</id>
        <name>my snapshots</name>
        <url>http://nexus.mycompany.com/nexus/content/repositories/snapshots</url>
    </snapshotRepository>

</distributionManagement>

<repositories>
    <repository>
        <id>myrepo</id>
        <name>My Public Repository</name>
        <url>http://nexus.mycompany.com/nexus/content/groups/public</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

答案 3 :(得分:1)

您的存储库中是否存在该依赖项? (在pom.xml或settings.xml中)?

看起来不是。顺便说一下,看看你的配置,只是你没有使用-o(离线)。您还可以使用-U刷新快照。

答案 4 :(得分:0)

你可以

  • 使用构建所有快照的父项目,或
  • 使用例如mvn:deploy
  • 将您的快照部署到您的maven构建服务器(nexus / archiva / ..)

答案 5 :(得分:0)

让我们清楚一些术语,以确保没有误解。

“Maven Central”(http://search.maven.org/)是一个全球网站,您只能在其中找到版本。 Central不接受快照,因此在那里部署会给你一个错误。

您可能意味着您的本地/公司范围内的maven代理/缓存。这些也可以配置为拒绝快照版本。对于Nexus,您还可以定义更复杂的规则。在我的情况下,我遇到了一个问题,在mvn deploy期间没有出错,但我可以在服务器的日志中看到错误。

尝试关注数据:启用调试(mvn -X)以查看Maven上传数据的位置。然后检查服务器以查看工件是否真正上传。检查服务器的日志是否有错误。

另请注意,快照依赖项每天只刷新一次;所以这不会起作用:

PC#1:mvn install - &gt;错误缺少依赖项 PC#2:mvn deploy PC#1:mvn install - &gt;由于“每天更新一次”政策

,依赖性仍然缺失

尝试mvn install -U强制Maven刷新其缓存的元数据。

答案 6 :(得分:0)

即使在命令行上设置-U,我也遇到了不更新快照的问题。对我来说问题是我的客户端是Maven 3而服务器是Maven 2,而在Maven 3中不再支持独特的快照。我们必须创建一个带有带时间戳的快照的新存储库,以支持3.xx客户端。