URLClassLoader를 사용하여 외부 jar 파일을로드하고 실행하려고합니다.Java에서 jar 파일의 기본 클래스 이름을 가져 오는 방법은 무엇입니까?
"Main-Class"를 얻는 가장 쉬운 방법은 무엇입니까?
URLClassLoader를 사용하여 외부 jar 파일을로드하고 실행하려고합니다.Java에서 jar 파일의 기본 클래스 이름을 가져 오는 방법은 무엇입니까?
"Main-Class"를 얻는 가장 쉬운 방법은 무엇입니까?
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
당신은 jarfile가를 다운로드해야합니다; 이에 대한 몇 가지 자바 코드는 다음과 같을 수 있습니다
JarFile jf = new JarFile(new File("downloaded-file.jar"));
if(jf.getManifest().getEntries().containsKey("Main-Class")) {
String mainClassName = jf.getManifest().getEntries().get("Main-Class");
}
예, 자체 실행 중입니다. 나는 수동으로 생각 목록 파일을 파싱하지 않고 그 이름을 얻고 싶다. –
here - Listing the main attributes of a jarfile에서 나는 적어도 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() 메소드
나는 그것이 당신이 찾고있는 것이 확실치 않지만 항아리가 올바르게 구성되어 있다면 항아리에 메인 클래스를 명시하는 매니페스트 파일이있을 것이라고 기대할 것입니다. 따라서 당신은 그것을 알아낼 필요가 없습니다. – hovanessyan
나는 그 파일을 수동으로 읽지 않고 간단한 방법을 찾고있다. 'java -jar'는 manifest에서 속성을 읽기 위해 라이브러리 함수를 사용합니까? –
나는 그것을 모른다. 가능성이 높다. 공식 문서의 내용 : 매니페스트에 Main-Class 헤더를 설정 한 후 java 명령의 다음 형식을 사용하여 JAR 파일을 실행합니다. java -jar JAR 이름 지정된 클래스의 기본 메소드 Main-Class 헤더가 실행됩니다. 그 항아리에 매니 페스트 (manifest)의 존재를 강요 할 수 있다면, 이것은 갈 수있는 가장 쉽고 (아마도 더 나은) 방법이 될 것입니다. – hovanessyan