你能在运行时判断你是否从jar中运行java吗?

2022-08-31 23:58:17

我有一个应用程序,我的一些用户从Eclipse运行,其他人使用jar文件运行它。

我希望在从 jar 中运行时执行一些操作,但我不希望在从 Eclipse 运行时执行这些操作。

有没有办法在运行时知道当前应用程序是否在jar中运行?

谢谢!

迪克拉


答案 1

好吧,您可以判断是否已从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

答案 2

我有两个更好的解决方案。第一:

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
}

推荐