2015-10-26 6 views
5

मैं यह पता लगाने की कोशिश कर रहा हूं कि एक जार के अंदर कौन सी कक्षा मुख्य या आपूर्ति विधि का नाम है (यदि संभव हो)।जावा कोड का उपयोग कर एक जार के अंदर मुख्य का पता लगाएं।

फिलहाल मैं निम्नलिखित कोड

public static void getFromJars(String pathToAppJar) throws IOException{ 
    FileInputStream jar = new FileInputStream(pathToAppJar); 
    ZipInputStream zipSteam = new ZipInputStream(jar); 
    ZipEntry ze; 
    while ((ze = zipSteam.getNextEntry()) != null) { 
     System.out.println(ze.toString());   
    } 
    zipSteam.close(); 
} 

यह मैं इन पैकेजों के तहत संकुल और वर्गों प्राप्त करने की अनुमति देगा है, लेकिन अगर यह संभव हो सकता है यहां तक ​​कि कक्षाओं के अंदर तरीकों पाने के लिए मैं नहीं जानता। आगे, मुझे नहीं पता कि यह दृष्टिकोण जार के अंदर कई पीकेजी के मामले के लिए भी अच्छा है, क्योंकि प्रत्येक पैकेज में इसमें मुख्य श्रेणी हो सकती है।

मैं किसी भी विचार की सराहना करता हूं।

+0

आप एक जावा Decompiler और खोज decompiled परिणामों का प्रयोग कर सकते हैं: http://jd.benow.ca/ – Simulant

+0

यह सच है, और मैं इस समय इसका उपयोग कर रहा हूं, लेकिन मुझे कुछ और स्वचालित – Quantico

+0

http://stackoverflow.com/questions/28776205/java-binary-class-file-format-parser का डुप्लिकेट चाहिए? – Marged

उत्तर

3

एफवीयू की टिप्पणियों के लिए धन्यवाद, मैं निम्नलिखित कोड के साथ समाप्त हुआ।

 public static void getFromJars(String pathToAppJar) throws IOException, ClassNotFoundException 
     { 

      FileInputStream jar = new FileInputStream(pathToAppJar); 
      ZipInputStream zipSteam = new ZipInputStream(jar); 
      ZipEntry ze; 
      URL[] urls = { new URL("jar:file:" + pathToAppJar+"!/") }; 
      URLClassLoader cl = URLClassLoader.newInstance(urls); 

      while ((ze = zipSteam.getNextEntry()) != null) { 

       // Is this a class? 
       if (ze.getName().endsWith(".class")) { 

       // Relative path of file into the jar. 
       String className = ze.getName(); 

       // Complete class name 
       className = className.replace(".class", "").replace("/", "."); 
       Class<?> klazz = cl.loadClass(className); 
       Method[] methodsArray = klazz.getMethods(); 

       } 
      } 
      zipSteam.close(); 
    } 

मैं, कोड तरीकों पाया का उपयोग करता है हटा दिया है, क्योंकि यह इस उत्तर के लिए महत्वपूर्ण नहीं है

संबंधित मुद्दे