URLClassLoaderを使用して外部jarファイルをロードして実行します。Javaからjarファイルのメインクラスの名前を取得する方法は?
"Main-Class"を取得する最も簡単な方法は何ですか?
URLClassLoaderを使用して外部jarファイルをロードして実行します。Javaからjarファイルのメインクラスの名前を取得する方法は?
"Main-Class"を取得する最も簡単な方法は何ですか?
here - Listing the main attributes of a 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) {}
}
}
'( - >(java.util.jar.JarFile。" myjarfile.jar ")(.getManifest)(.getMainAttributes)(.getValue" Main-Class "))' ' –
これは、jarが自己実行型である場合にのみ可能です。その場合には、メインクラスは、キーMain-Class:
いくつかの参考情報とマニフェストファイルで指定されますが、ここで提供されています。それにアクセスするためにjava.util.JarFile
を使用 http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
あなたはjarファイルをダウンロードする必要があります。このため、いくつかの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");
}
はい、自己実行型です。私は思考マニフェストファイルを手動で解析することなくその名前を取得したい。 –
から私はこの古い質問ですが、少なくとも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()メソッド
私はそれがあなたが探しているものかどうかはわかりませんが、jarが正しく構成されていれば、jarファイルにmainクラスを指定するマニフェストファイルがあると思います。したがって、あなたはそれを理解する必要はありません。 – hovanessyan
私はそのファイルをマニュアルで読むことなく簡単な方法を探しています。 'java -jar'はいくつかのライブラリ関数を使ってマニフェストから属性を読み込みますか? –
私は知らない、それは本当らしい。公式の文書だけが言います:マニフェストのMain-Classヘッダーを設定したら、javaコマンドの次の形式を使用してJARファイルを実行します: java -jar JAR名 指定されたクラスのメインメソッドMain-Classヘッダーの中で実行されます。その瓶にマニフェストの存在を強制することができれば、これは最も簡単な(そしておそらくより良い)方法になります。 – hovanessyan