URLClassLoader kullanarak harici jar dosyası yüklemek ve yürütmek istiyorum.Java'dan bir jar dosyasının ana sınıfının adı nasıl alınır?
"Ana Sınıf" almanın en kolay yolu nedir?
URLClassLoader kullanarak harici jar dosyası yüklemek ve yürütmek istiyorum.Java'dan bir jar dosyasının ana sınıfının adı nasıl alınır?
"Ana Sınıf" almanın en kolay yolu nedir?
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) {}
}
}
Kullanarak '(-> (java.util.jar.JarFile." Myjarfile.jar ") (.getManifest) (.getMainAttributes) (.getValue" Ana Sınıf "))' –
Bu, ancak kavanoz kendi kendine yürütüldüğünde mümkün olacaktır; bu durumda ise ana sınıfı anahtar Main-Class:
Bazı referans bilgileri ile manifest dosyasında belirtilecektir burada sağlanır: o erişmek için java.util.JarFile
kullanmak http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Sen JARDOSYASI indirmeleri gerekir; Bunun için bazı java kodu olabilir:
JarFile jf = new JarFile(new File("downloaded-file.jar"));
if(jf.getManifest().getEntries().containsKey("Main-Class")) {
String mainClassName = jf.getManifest().getEntries().get("Main-Class");
}
Evet, kendiliğinden yürütülür. Düşünce bildirim dosyasını elle ayrıştırmadan bu adı almak istiyorum. –
here - Listing the main attributes of a jarfile itibaren en az JDK 1.7 ile, daha önce teklif edilen çözümler işe görünmüyordu, bu eski bir soru olduğunu biliyorum ama. Bu nedenle ben benimkini gönderme kulüpler:
JarFile j = new JarFile(new File("jarfile.jar"));
String mainClassName = j.getManifest().getMainAttributes().getValue("Main-Class");
j.getManifest().getEntries()
Ana sınıfı özelliğini içermez çıkıyor çünkü diğer çözümler bendim için işe yaramadı nedeni, bunun yerine tarafından döndürülen listesinde bulunan edildi getMainAttributes() yöntemi.
Aradığın şeyin bu olduğundan emin değilim, ancak kavanoz doğru bir şekilde oluşturulmuşsa, kavanozda, ana sınıfın hangisi olduğunu belirten bir açık dosya olmasını beklersiniz. Böylece bunu anlamaya gerek yok. – hovanessyan
Bu dosyayı elle okumaksızın basit yollar arıyorum. Java -jar, manifestten gelen özellikleri okumak için bazı kütüphane işlevini kullanıyor mu? –
Bilmiyorum, büyük olasılıkla böyle. Resmi doktor şöyle diyor: Ana-sınıf başlığını manifestoda ayarladıktan sonra java komutunun aşağıdaki formunu kullanarak JAR dosyasını çalıştırırsınız: java -jar JAR ismi Belirtilen sınıfın ana yöntemi Ana Sınıf başlıkta yürütülür. Bu kavanozda tezahürün varlığını sürdürürseniz, bu en kolay (ve muhtemelen daha iyi) olacak. – hovanessyan