如何从Java中获取jar文件的主类名称



我想使用URLClassLoader加载和执行外部jar文件。

从它获得"Main-Class"最简单的方法是什么?

我知道这是一个老问题,但是,至少在JDK 1.7中,先前提出的解决方案似乎不起作用。出于这个原因,我在此张贴我的:

JarFile j = new JarFile(new File("jarfile.jar"));
String mainClassName = j.getManifest().getMainAttributes().getValue("Main-Class");

其他解决方案不适合我的原因是因为j.getManifest().getEntries()原来不包含Main-Class属性,而是包含在getMainAttributes()方法返回的列表中。

从这里-列出一个jarfile

的主要属性
import java.util.*;
import java.util.jar.*;
import java.io.*;
public class MainJarAtr{
    public static void main(String[] args){
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.print("Enter jar file name: ");
            String filename = in.readLine();
            if(!filename.endsWith(".jar")){
                System.out.println("File not in jar format.");
                System.exit(0);
            }
            File file = new File(filename);
            if (file.exists()){
                // Open the JAR file
                JarFile jarfile = new JarFile(filename);
                // Get the manifest
                Manifest manifest = jarfile.getManifest();
                // Get the main attributes in the manifest
                Attributes attrs = (Attributes)manifest.getMainAttributes();
                // Enumerate each attribute
                for (Iterator it=attrs.keySet().iterator(); it.hasNext(); ) {
                    // Get attribute name
                    Attributes.Name attrName = (Attributes.Name)it.next();
                    System.out.print(attrName + ": ");
                    // Get attribute value
                    String attrValue = attrs.getValue(attrName);
                    System.out.print(attrValue);
                    System.out.println();
                }
            }
            else{
                System.out.print("File not found.");
                System.exit(0);
            }
        }
        catch (IOException e) {}
    }
}

只有在jar是自动执行的情况下才有可能;在这种情况下,主类将在清单文件中使用密钥Main-Class:

指定。

提供了一些参考信息:http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html

你需要下载jar文件,然后使用java.util.JarFile来访问它;一些Java代码可能是这样的:

JarFile jf = new JarFile(new File("downloaded-file.jar"));
if(jf.getManifest().getEntries().containsKey("Main-Class")) {
    String mainClassName = jf.getManifest().getEntries().get("Main-Class");
}

相关内容

  • 没有找到相关文章

最新更新