gpt4 book ai didi

java - 使用一个类从头开始创建 jar

转载 作者:行者123 更新时间:2023-12-01 09:56:00 24 4
gpt4 key购买 nike

在搜索了半天的各种堆栈线程并没有找到答案后,我会尝试问自己。

下面的方法充满了执行以下操作的尝试。在一个项目中,我有一个名为 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) {}
}

如有任何其他问题,请随时提出。

最佳答案

假设您的 A 类位于包下,请更改...
JarEntry e = new JarEntry("A.class");

JarEntry e = new JarEntry(SimpleJava.class.getName().replace('.', '/') + ".class");

这会将您的 A.class 放在 jar 中正确的包/目录结构下。

如果文件编码不匹配,XML 解析器将无法读取文件。因此,为了匹配 .classpath 文件中提到的 xml 编码,请将 f.write(s.getBytes()); 更新为 f.write(s. getBytes("UTF-8"));

希望这对您有用。

关于java - 使用一个类从头开始创建 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37213430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com