测试 java 对象是否从 jar 文件执行?
Test if a java object is executing from a jar file?
我想 运行 测试将部署在 .jar 文件中的 Java 项目。但我不想在调试时经历构建完整 jar 文件的麻烦。
问题是我想读取存在于 jar 中但在构建之前位于其他地方的文件。我想测试 运行 中的程序是否包含在 jar 文件中,如果没有,告诉它在别处寻找必要的文件,如下所示:
java.io.File dataFolder;
if (isRunningFromJar())
dataFolder = ...
else
dataFolder = ...
这可以做到吗?
我在调试非 jar 变体时直接 运行 宁 class 文件:
java -cp 'src/' com.path.Run
要回答您的问题,您可以使用 Class.getResource().getProtocal()。下面是一个工作示例:
import java.util.Objects;
public class Test {
public static void main(String[] args){
String protocol = Test.class.getResource("Test.class").getProtocol();
if(Objects.equals(protocol, "jar")){
System.out.println("running in jar");
} else if(Objects.equals(protocol, "file")) {
System.out.println("running in file");
}
}
}
或者,这里有一个解决方法可以更简单地实现相同的目标。
你可以在dev环境中传入一个JVM参数,比如java -Dfolder=
在代码中,
if(StringUtils.isNotBlank(System.getParameter("folder")) //dev env
dataFolder = System.getParameter("folder")
else
dataFolder = <relative path in jar>
根据程序的严重程度,您可能希望在发布前删除 System.getParameter 代码。
我想 运行 测试将部署在 .jar 文件中的 Java 项目。但我不想在调试时经历构建完整 jar 文件的麻烦。
问题是我想读取存在于 jar 中但在构建之前位于其他地方的文件。我想测试 运行 中的程序是否包含在 jar 文件中,如果没有,告诉它在别处寻找必要的文件,如下所示:
java.io.File dataFolder;
if (isRunningFromJar())
dataFolder = ...
else
dataFolder = ...
这可以做到吗?
我在调试非 jar 变体时直接 运行 宁 class 文件:
java -cp 'src/' com.path.Run
要回答您的问题,您可以使用 Class.getResource().getProtocal()。下面是一个工作示例:
import java.util.Objects;
public class Test {
public static void main(String[] args){
String protocol = Test.class.getResource("Test.class").getProtocol();
if(Objects.equals(protocol, "jar")){
System.out.println("running in jar");
} else if(Objects.equals(protocol, "file")) {
System.out.println("running in file");
}
}
}
或者,这里有一个解决方法可以更简单地实现相同的目标。
你可以在dev环境中传入一个JVM参数,比如java -Dfolder=
在代码中,
if(StringUtils.isNotBlank(System.getParameter("folder")) //dev env
dataFolder = System.getParameter("folder")
else
dataFolder = <relative path in jar>
根据程序的严重程度,您可能希望在发布前删除 System.getParameter 代码。