4

我正在尝试使用位于我们本地网络中的存储库设置 Maven,并且我已经为快照和发布设置了一个存储库(都是 apache 档案)。

从发布存储库下载包工作正常。但是,当我尝试从快照存储库加载 SNAPSHOT 版本时,当我尝试下载自己部署的 SNAPSHOT 时,我不断收到错误:

[INFO] ------------------------------------------------------------------------  
[ERROR] BUILD ERROR  
[INFO] ------------------------------------------------------------------------  
[INFO] Failed to resolve artifact.  

Missing:  
----------  
1) my.company:product2:jar.lastUpdated:0.0.2-SNAPSHOT

  Try downloading the file manually from the project website.  
[...]

 Path to dependency:   
        1) my.company:product1:war:0.0.1-SNAPSHOT  
        2) my.company:product2:jar.lastUpdated:0.0.2-SNAPSHOT  

 ----------
1 required artifact is missing.

for artifact: 
 my.company:product1:war:0.0.1-SNAPSHOT

from the specified remote repositories:  
  my-internal (http://my-repo:8080/archiva/repository/internal),  
  central (http://repo1.maven.org/maven2),
  my-snapshots (http://my-repo:8080/archiva/repository/snapshots),

该软件包在快照存储库中可用,网络已启动,登录工作正常。

我的 pom.xml 看起来像这样:

 [...]
<repositories>
  <repository>
  <id>my-snapshots</id>
  <name>my name Snapshots Repository</name>
  <url>http://my-snapshots:8080/archiva/repository/snapshots</url>
  <snapshots>
<enabled/>
<updatePolicy/>
<checksumPolicy/>
</snapshots>
</repository>
<repository>
  <id>my-internal</id>
  <name>my name internal Repository</name>
  <url>http://my-repo:8080/archiva/repository/internal</url>
</repository>
  </repositories>
 [...]

<dependency>
    <groupId>my.company</groupId>
    <artifactId>frontend-api</artifactId>
    <version>0.0.2-SNAPSHOT</version>
    <type>jar.lastUpdated</type>
</dependency>
 [...]

我还检查了从快照存储库下载的 maven-metadata.xml:

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
 <groupId>my.company</groupId>
 <artifactId>product2</artifactId>
 <version>0.0.2-SNAPSHOT</version>
 <versioning>
    <snapshot>
      <buildNumber>7</buildNumber>
     <timestamp>20090824.130209</timestamp>
  </snapshot>
   <lastUpdated>20090824130209</lastUpdated>
 </versioning>
</metadata>

它显示正确的日期和时间戳(包含此时间戳的包存在于 repo 中)。

我是否遗漏了有关存储库设置或 SNAPSHOT 概念的内容?有没有人有同样的问题?或者有人知道一些关于 SNAPSHOT 和存储库的详细文档吗?

4

3 回答 3

3

my-app 的依赖声明是什么样的?我希望它看起来像这样:

<dependency>
  <groupId>my.company</groupId>
  <artifactId>product2</artifactId>
  <version>0.0.2-SNAPSHOT</version>
</dependency>

从错误来看,它看起来像是由原型生成并添加了 lastUpdated 类型。如果是这种情况,删除 lastUpdated 应该可以解决问题。

如果不是这样,你能分享你的POM部分吗?

有关 Maven SNAPSHOT 版本的更多信息,请参阅Maven 书籍

Maven 版本可以包含一个字符串文字,以表示项目当前正在积极开发中。如果版本包含字符串“SNAPSHOT”,那么当您安装或发布此组件时,Maven 会将此标记扩展为转换为 UTC(协调世界时)的日期和时间值。例如,如果您的项目具有“1.0-SNAPSHOT”版本,并且您将此项目的工件部署到 Maven 存储库,如果您要在 11 部署发布,Maven 会将此版本扩展为“1.0-20080207-230803-1” UTC 时间 2008 年 2 月 7 日下午 8 点。换句话说,当你部署一个快照时,你并没有发布一个软件组件。您正在特定时间发布组件的快照。

因此通常不需要 lastUpdated 属性。

于 2009-08-25T14:00:11.683 回答
0

使用 -e 标志运行 mvn 以获取更详细的错误消息。

于 2009-08-25T14:00:46.723 回答
0

你的 settings.xml 文件呢?

如果您的 pom xml 具有以下内容:

<repositories>
   <repository>
   <id>my-snapshots</id>
   <name>my name Snapshots Repository</name>
   <url>http://my-snapshots:8080/archiva/repository/snapshots</url>
   <snapshots>
       <enabled/>
       <updatePolicy/>
       <checksumPolicy/>
   </snapshots>
</repository>

那么 setting.xml 应该是这样的:

<server>
    <id>my-snapshots</id>
    <username>user</username>
    <password>pass</password>
    <privateKey>${user.home}/.ssh/id_dsa</privateKey>
    <passphrase>some_passphrase</passphrase>
    <filePermissions>664</filePermissions>
    <directoryPermissions>775</directoryPermissions>
    <configuration></configuration>
  </server>

1) 仓库用户名和密码必须如上

2)settings和pom中的id标签必须相同:

<id>my-snapshots</id>
于 2009-08-26T20:49:12.703 回答