我有一个通过此命令手动创建的 JAR 文件(换行以便于阅读):
jar -cfm app_standalone.jar manifest.txt
application/client/*.class
application/data/*.class
application/startup/*.class
*.txt
清单如下所示:
Main-Class: application.startup.StartFrame
我在外面的目录中运行这个命令/application/
。生成的 JAR 的目录结构如下所示:
[ROOT_DIR_OF_JAR]/type1.txt
[ROOT_DIR_OF_JAR]/type2.txt
[ROOT_DIR_OF_JAR]/type3.txt
[ROOT_DIR_OF_JAR]/application
[ROOT_DIR_OF_JAR]/application/client/example.class
[ROOT_DIR_OF_JAR]/application/data/another.class
[ROOT_DIR_OF_JAR]/application/startup/run_me.class
当我运行 JAR 文件时,它执行得很好,但前提是它与文件位于同一目录中.txt
,它显然是在引用文件。指向这些.txt
文件的代码位于/application/client/
:
package application.client;
String typeName = "type2"; // could be type1 or type3
InputStream is = modelViewer.modelEnv.openFile(typeName + ".txt");
// ===============================================================
package application.startup;
public InputStream openFile(String name) {
File f;
FileInputStream is = null;
String dir = System.getProperty("user.dir");
f = new File(dir, name);
is = new FileInputStream(f);
return is;
}
我尝试使用目录.txt
中的“资源”文件创建 JAR,但/client/
没有成功。正如其他类似问题的答案所建议的那样,我也尝试过更改代码中的路径。我猜这是使用相对路径的某种问题。我可以做些什么来使这些文件在JAR 中正确引用,以便应用程序可以独立运行?