测试java对象是否从jar文件执行?

测试java对象是否从jar文件执行?,java,jar,Java,Jar,我想为一个Java项目运行测试,该项目将部署在一个.jar文件中。但我不想在调试过程中遇到构建完整jar文件的麻烦 问题是,我想从jar中存在的文件中读取,但在构建jar之前,这些文件位于其他位置。我想测试正在运行的程序是否包含在jar文件中,如果不包含,请告诉它在其他地方查找必要的文件,如下所示: java.io.File dataFolder; if (isRunningFromJar()) dataFolder = ... else dataFolder = ... 这能做

我想为一个Java项目运行测试,该项目将部署在一个.jar文件中。但我不想在调试过程中遇到构建完整jar文件的麻烦

问题是,我想从jar中存在的文件中读取,但在构建jar之前,这些文件位于其他位置。我想测试正在运行的程序是否包含在jar文件中,如果不包含,请告诉它在其他地方查找必要的文件,如下所示:

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代码。

您不应该这样做。否则,您只是在练习测试代码,而不是生产代码。我只是在调试。这不是生产代码。它将是,并且部分代码尚未测试。