经过半天的搜索各种堆栈线程而没有找到答案,我会试着问自己。从头开始创建一个类的jar
以下方法充满了尝试以下操作。 在一个项目中,我有一个名为A的类。该类未在项目中使用,它具有main()内部代码和小代码来创建测试文件并显示一个javafx窗口。方法导出使用所述类创建一个jar文件,将其标记为主类。 我正在寻找一种方法来将lib.jar打包到output.jar文件中,无论哪种方式。 我必须注意到.. output.jar被创建,启动后它不会显示javafx窗口,但会创建测试文件,所以如果您知道导致此问题的原因,请随时参与。 :)
public void export() {
Manifest man = new Manifest();
man.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
man.getMainAttributes().put(Attributes.Name.CLASS_PATH, ". mylib.jar");
man.getMainAttributes().put(Attributes.Name.MAIN_CLASS, A.class.getName());
try {
JarOutputStream f = new JarOutputStream(new FileOutputStream("output.jar"), man);
InputStream c = getClass().getResourceAsStream("A.class");
JarEntry e = new JarEntry("A.class");
f.putNextEntry(e);
byte[] buffer = new byte[1024];
while (true) {
int count = c.read(buffer);
if (count == -1)
break;
f.write(buffer, 0, count);
}
f.closeEntry();
JarEntry cp = new JarEntry(".classpath");
f.putNextEntry(cp);
String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<classpath>"
+ "<classpathentry kind=\"src\" path=\"src\"/>"
+ "<classpathentry kind=\"con\" path=\"org.eclipse.jdt.launching.JRE_CONTAINER\"/>"
+ "<classpathentry kind=\"lib\" path=\"mylib.jar\"/>"
+ "<classpathentry kind=\"output\" path=\"bin\"/>"
+ "</classpath>";
f.write(s.getBytes());
f.closeEntry();
f.close();
} catch (IOException e) {}
}
随意问任何进一步的问题。
好点,谢谢:) – Poody
我甚至不确定你需要一个可运行jar的.classpath文件tho – Poody
你是对的,.classpath不需要存在于jar文件中。更正了我的答案,将“.class”添加到文件名。 –