maven 3如何确定快照是否更新?

时间:2012-06-07 07:13:32

标签: java maven maven-metadata

我们正在内部托管一个简单的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的“updated”标签?

2 个答案:

答案 0 :(得分:2)

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

mvn clean install

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

这是一个痛苦的屁股,如果在几天内你完成了对这个模块的工作并开始处理其他模块,而这又依赖于这个初始模块,因为它不会选择来自远程存储库的更改。

已为此here提交了错误。但是,不太可能很快修复。因此,了解这种行为至关重要。

答案 1 :(得分:1)

最后,问题出在metadata.xml上。如果我们的服务器生成模型1.1.0,如originel请求中提到的那样,maven将只更新元数据。通过切换旧的“1.0.0”模型,它可以工作。示例metadata.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还是我们的回购中的错误,但至少我们可以继续工作。