你能在运行时判断你是否从jar中运行java吗?
我有一个应用程序,我的一些用户从Eclipse运行,其他人使用jar文件运行它。
我希望在从 jar 中运行时执行一些操作,但我不希望在从 Eclipse 运行时执行这些操作。
有没有办法在运行时知道当前应用程序是否在jar中运行?
谢谢!
迪克拉
我有一个应用程序,我的一些用户从Eclipse运行,其他人使用jar文件运行它。
我希望在从 jar 中运行时执行一些操作,但我不希望在从 Eclipse 运行时执行这些操作。
有没有办法在运行时知道当前应用程序是否在jar中运行?
谢谢!
迪克拉
好吧,您可以判断是否已从JAR文件加载类 - 使用并查看返回的URL是否以“jar:”开头Foo.class.getResource("Foo.class")
例如,以以下程序为例:
public class Foo {
public static void main(String[] args) {
System.out.println(Foo.class.getResource("Foo.class"));
}
}
运行它从文件系统加载文件:
file:/C:/Users/Jon/Test/com/whatever/Foo.class
从 jar 文件运行它:
jar:file:/C:/Users/Jon/Test/foo.jar!/com/whatever/Foo.class
我有两个更好的解决方案。第一:
URL url = this.getClass().getClassLoader().getResource("input.txt");
URLConnection urlConnection = url.openConnection();
if (urlConnection instanceof JarURLConnection) {
// run in jar
} else {
// run in ide
}
第二:
String protocol = this.getClass().getResource(this.getClass.getName() + ".class").getProtocol();
if(Objects.equals(protocol, "jar")){
// run in jar
} else if(Objects.equals(protocol, "file")) {
// run in ide
}