1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.jar.identification.hash;
20
21 import javax.inject.Named;
22 import javax.inject.Singleton;
23
24 import java.io.IOException;
25 import java.io.InputStream;
26 import java.util.List;
27 import java.util.jar.JarEntry;
28
29 import org.apache.commons.codec.digest.DigestUtils;
30 import org.apache.maven.shared.jar.JarAnalyzer;
31 import org.apache.maven.shared.jar.JarData;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35
36
37
38
39 @Singleton
40 @Named("bytecode")
41 public class JarBytecodeHashAnalyzer implements JarHashAnalyzer {
42 private final Logger logger = LoggerFactory.getLogger(getClass());
43
44 public String computeHash(JarAnalyzer jarAnalyzer) {
45 JarData jarData = jarAnalyzer.getJarData();
46
47 String result = jarData.getBytecodeHash();
48 if (result == null) {
49 List<JarEntry> entries = jarAnalyzer.getClassEntries();
50
51 try {
52 for (JarEntry entry : entries) {
53 try (InputStream is = jarAnalyzer.getEntryInputStream(entry)) {
54 result = DigestUtils.sha1Hex(is);
55 }
56 }
57 jarData.setBytecodeHash(result);
58 } catch (IOException e) {
59 logger.warn("Unable to calculate the hashcode.", e);
60 }
61 }
62 return result;
63 }
64 }