Eclipse / Ant md5与任何其他md5都不匹配

时间:2012-04-19 15:11:39

标签: python eclipse ant md5

所以我仍然在努力遵循这个:http://code.google.com/p/dkpro-core-asl/wiki/MyFirstDKProProject

我坚持在另一个有着非常奇怪的MD5问题的地方,我不明白为什么我的Eclipse / Ant计算的md5与md5不同,我可以使用md5sum(cygwin)或Python来计算!

Eclipse / Ant msg:

BUILD FAILED

D:\eclipseWorkspace\maven.1334761781732\branches\1.2.x\de.tudarmstadt.ukp.dkpro.core.treetagger\src\scripts\build.xml:34: The following error occurred while executing this line:
D:\eclipseWorkspace\maven.1334761781732\branches\1.2.x\de.tudarmstadt.ukp.dkpro.core.treetagger\src\scripts\build.xml:311: The following error occurred while executing this line:
D:\eclipseWorkspace\maven.1334761781732\branches\1.2.x\de.tudarmstadt.ukp.dkpro.core.treetagger\src\scripts\build.xml:451: MD5 checksum mismatch for [la-tagger-little-endian.par]. 
Please verify the checksum and if necessary update this script. 
Expected: f959f8633ef842f069f0331ad19dc8b4
Actual  : bde1f6a63b2c5a658ba25a8eb90832a8

好的,这可能是因为FTP上的文件可能已经改变了,这里是ANT的build.xml文件的一部分:

<target name="la">
    <property name="version.la" value="2011050700"/>

    <install-model-file url="ftp://ftp.ims.uni-stuttgart.de/pub/corpora/latin-par-linux-3.2.bin.gz"
        type="tagger" endianness="little-endian" language="la" encoding="ISO-8859-1"
        md5="f959f8633ef842f069f0331ad19dc8b4"/>
</target>

对我来说奇怪的是:

使用CYGWIN(通过FTP手动下载文件,使用filezilla,二进制模式或auto,当然不是ascii):

$ md5sum latin-par-linux-3.2.bin.gz
e77493eed28857bf93aca91c2a6e5a9b *latin-par-linux-3.2.bin.gz

使用python:

import urllib
import hashlib
data = urllib.urlopen("ftp://ftp.ims.uni-stuttgart.de/pub/corpora/latin-par-linux-3.2.bin.gz").read()
md5 = hashlib.md5()
md5.update(data)
print md5.hexdigest()
e77493eed28857bf93aca91c2a6e5a9b

def md5_for_file(filePath):
    md5 = hashlib.md5()
    file = open(filePath, 'rb')
    while True:
        data = file.read(8192)
        if not data:
            break
        md5.update(data)

    file.close()   
    return md5.hexdigest()

print md5_for_file(r"D:\ftp.ims.uni-stuttgart.de.pub.corpora.20120419\latin-par-linux-3.2.bin.gz")
e77493eed28857bf93aca91c2a6e5a9b

并且还使用来自网络的免费软件来计算MD5,它们彼此匹配但是不同于ANT计算为“实际”!

2 个答案:

答案 0 :(得分:0)

为了手动计算md5,您可以先提取文件。

使用gunzip或7zip。

答案 1 :(得分:0)

我是DKPro Core开发人员。我们进行这些MD5检查的原因是我们在远程文件更改时需要注意的事项,而不另行通知。

您不必自己计算MD5金额。该脚本会告诉您它知道哪个MD5以及它实际获得了什么。如果您希望脚本继续运行,只需更新build.xml中记录的MD5,并告诉您它是“实际”的。但是,您也应该更新版本。

以下段落来自我们wiki并解释了背后的理由:

  

并非所有资源都由其维护人员正确版本化。我们观察到资源从一天变为另一天而没有任何公告或增加版本号(如果存在的话)。因此,我们根据存储在build.xml文件中的MD5校验和验证所有资源。这样,我们可以注意到远程资源是否已被更改。发生这种情况时,我们在build.xml文件中添加一条注释,指示我们何时注意到MD5更改更新了相应资源的版本。

     

由于我们不会每天测试build.xml文件,因此当您尝试自行打包资源时,可能会收到MD5校验和错误。如果发生这种情况,请使用文本编辑器打开build.xmlfile,找到失败的MD5校验和,更新它并更新相应资源的版本。您也可以在DKPro Core User Group上告诉我们,我们将更新build.xml文件。

顺便说一下。同时教程已经改变,使用我们可以分发模型的不同组件,所以这应该很少成为问题。