测试java对象是否从jar文件执行?
我想为一个Java项目运行测试,该项目将部署在一个.jar文件中。但我不想在调试过程中遇到构建完整jar文件的麻烦 问题是,我想从jar中存在的文件中读取,但在构建jar之前,这些文件位于其他位置。我想测试正在运行的程序是否包含在jar文件中,如果不包含,请告诉它在其他地方查找必要的文件,如下所示:测试java对象是否从jar文件执行?,java,jar,Java,Jar,我想为一个Java项目运行测试,该项目将部署在一个.jar文件中。但我不想在调试过程中遇到构建完整jar文件的麻烦 问题是,我想从jar中存在的文件中读取,但在构建jar之前,这些文件位于其他位置。我想测试正在运行的程序是否包含在jar文件中,如果不包含,请告诉它在其他地方查找必要的文件,如下所示: java.io.File dataFolder; if (isRunningFromJar()) dataFolder = ... else dataFolder = ... 这能做
java.io.File dataFolder;
if (isRunningFromJar())
dataFolder = ...
else
dataFolder = ...
这能做到吗
我在调试非jar变量时直接运行类文件:
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 env中为instace、java-Dfolder传递一个JVM参数=
在守则中,
if(StringUtils.isNotBlank(System.getParameter("folder")) //dev env
dataFolder = System.getParameter("folder")
else
dataFolder = <relative path in jar>
if(StringUtils.isNotBlank(System.getParameter(“文件夹”))//dev env
dataFolder=System.getParameter(“文件夹”)
其他的
数据文件夹=
根据程序的严重程度,您可能希望在发布前删除System.getParameter代码。您不应该这样做。否则,您只是在练习测试代码,而不是生产代码。我只是在调试。这不是生产代码。它将是,并且部分代码尚未测试。