| 1 package fr.jayasoft.ivy.tools.analyser; 2 3 import java.io.BufferedReader ; 4 import java.io.File ; 5 import java.io.IOException ; 6 import java.io.InputStreamReader ; 7 import java.util.Date ; 8 import java.util.HashMap ; 9 import java.util.Map ; 10 11 import fr.jayasoft.ivy.DefaultDependencyDescriptor; 12 import fr.jayasoft.ivy.DefaultModuleDescriptor; 13 import fr.jayasoft.ivy.ModuleDescriptor; 14 import fr.jayasoft.ivy.util.Message; 15 16 public class JarJarDependencyAnalyser implements DependencyAnalyser { 17 private File _jarjarjarLocation; 18 19 public JarJarDependencyAnalyser(File jarjarjarLocation) { 20 _jarjarjarLocation = jarjarjarLocation; 21 } 22 23 24 public ModuleDescriptor[] analyze(JarModule[] modules) { 25 26 StringBuffer jarjarCmd = new StringBuffer ("java -jar \"").append(_jarjarjarLocation.getAbsolutePath()).append("\" --find --level=jar "); 27 Map jarModulesMap = new HashMap (); 28 Map mds = new HashMap (); 29 30 for (int i = 0; i < modules.length; i++) { 31 jarModulesMap.put(modules[i].getJar().getAbsolutePath(), modules[i]); 32 DefaultModuleDescriptor md = DefaultModuleDescriptor.newBasicInstance(modules[i].getMrid(), new Date (modules[i].getJar().lastModified())); 33 mds.put(modules[i].getMrid(), md); 34 jarjarCmd.append("\"").append(modules[i].getJar().getAbsolutePath()).append("\""); 35 if (i+1 < modules.length) { 36 jarjarCmd.append(File.pathSeparator); 37 } 38 } 39 40 Message.verbose("jarjar command: "+jarjarCmd); 41 42 try { 43 Process p = Runtime.getRuntime().exec(jarjarCmd.toString()); 44 BufferedReader r = new BufferedReader (new InputStreamReader (p.getInputStream())); 45 String line; 46 while ((line = r.readLine()) != null) { 47 String [] deps = line.split(" -> "); 48 JarModule module = (JarModule) jarModulesMap.get(deps[0]); 49 JarModule dependency = (JarModule) jarModulesMap.get(deps[1]); 50 51 if (module.getMrid().getModuleId().equals(dependency.getMrid().getModuleId())) { 52 continue; 53 } 54 Message.verbose(module.getMrid() + " depends on " + dependency.getMrid()); 55 56 DefaultModuleDescriptor md = (DefaultModuleDescriptor) mds.get(module.getMrid()); 57 58 DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(dependency.getMrid(), false); 59 dd.addDependencyConfiguration(ModuleDescriptor.DEFAULT_CONFIGURATION, ModuleDescriptor.DEFAULT_CONFIGURATION); 60 md.addDependency(dd); 61 } 62 } catch (IOException e) { 63 e.printStackTrace(); 65 } 66 return (ModuleDescriptor[]) mds.values().toArray(new ModuleDescriptor[mds.values().size()]); 67 } 68 69 70 public static void main(String [] args) { 71 JarJarDependencyAnalyser a = new JarJarDependencyAnalyser(new File ("D:/temp/test2/jarjar-0.7.jar")); 72 a.analyze(new JarModuleFinder("D:/temp/test2/ivyrep/[organisation]/[module]/[revision]/[artifact].[ext]").findJarModules()); 73 } 74 } 75 | Popular Tags |