2

我们在内部托管了一个简单的 maven 存储库,但 maven 似乎没有从中获取新的快照版本。我们的本地 Maven 存储库在 settings.xml 中配置:

<snapshots>
    <enabled>true</enabled>
    <updatePolicy>always</updatePolicy>
</snapshots>

将它与“mvn -U”之类的东西结合起来,如果适用,我希望 maven 能够获取最新的快照版本。正如我所收集的,maven 将检查 metadata.xml 的最后修改并从中确定快照是否已更新。但是,我并不完全清楚上次更新的是哪个。以下面的 metadata.xml 为例:

<metadata>
<groupId>com.example</groupId>
<artifactId>example-test</artifactId>
<version>1.0-SNAPSHOT</version>
<versioning>
    <versions>
        <version>1.0-SNAPSHOT</version>
    </versions>
    <snapshot>
        <timestamp>20120427.113221</timestamp>
        <buildNumber>1335519141810</buildNumber>
    </snapshot>
    <lastUpdated>20120427113221</lastUpdated>
</versioning>

maven 是否使用 lastUpdated 标签?“最后修改”的 http 标头?snapshot.timestamp 标签还是其他东西?

无论如何,我们看到的行为是它确实会下载最新的 metadata.xml,但会停在那里,它不会重新下载快照本身。

编辑:我注意到 maven 2 中可选的独特快照功能在 maven 3 中已成为强制性。maven 是否可能根本没有检测到更新版本?现在从模块中查看 maven-metadata.xml:

<metadata modelVersion="1.1.0">
<groupId>com.example</groupId>
<artifactId>example-test</artifactId>
<version>1.0-SNAPSHOT</version>
<versioning>
    <snapshot>
        <timestamp>20120607.154257</timestamp>
        <buildNumber>1339076577</buildNumber>
    </snapshot>
    <lastUpdated>20120607154257</lastUpdated>
    <snapshotVersions>
        <snapshotVersion>
            <extension>jar</extension>
            <value>1.0-20120607.154257-1339076577</value>
            <updated>20120607154257</updated>
        </snapshotVersion>
    </snapshotVersions>
</versioning>

maven会检查内部版本号吗?snapshotVersion 的“更新”标签?

4

2 回答 2

2

如果您在本地处理模块并已运行:

mvn clean install

这将在您的本地 Maven 存储库中安装一个副本。该工件将处于锁定状态——这意味着——除非元数据*xml 已被删除,否则它不会从远程位置更新。

如果几天后您完成了此模块的工作并开始处理其他模块,这又取决于此初始模块,因为它不会接受更改,这真是令人头疼从您的远程存储库。

此处已为此提交了一个错误。但是,它不太可能很快得到修复。因此,有必要了解这种行为。

于 2012-06-07T07:27:52.903 回答
1

最后,问题出在 metadata.xml 上。如果我们的服务器生成模型 1.1.0,就像原始请求中提到的那样,maven 只会更新元数据。通过切换回较旧的“1.0.0”模型,它可以工作。示例元数据.xml:

<metadata modelVersion="1.0.0">
<groupId>com.example</groupId>
<artifactId>example-test</artifactId>
<version>1.0-SNAPSHOT</version>
<versioning>
    <snapshot>
        <timestamp>20120608.103301</timestamp>
        <buildNumber>1339144381</buildNumber>
    </snapshot>
    <lastUpdated>20120608103301</lastUpdated>
</versioning>

错误的 1.1.0 metadata.xml 是否是 maven 或我们的 repo 中的错误目前尚不清楚,但至少我们可以继续工作。

于 2012-06-08T11:49:07.627 回答