Проверить, выполняется ли объект java из файла jar? - PullRequest
0 голосов
/ 06 мая 2020

Я хочу запустить тесты для проекта Java, который будет развернут в файле .jar. Но я не хочу go из-за проблемы создания полного файла jar во время отладки.

Проблема в том, что я хочу читать из файлов, которые будут присутствовать в jar, но расположены в другом месте до его постройки. Я хотел бы проверить, содержится ли запускаемая программа в jar-файле, и, если нет, посоветовать ей поискать необходимые файлы в другом месте, например:

java.io.File dataFolder;

if (isRunningFromJar())
   dataFolder = ...
else
   dataFolder = ...

Можно ли это сделать?

Я запускаю файл класса напрямую при отладке варианта без jar:

java -cp 'src/' com.path.Run

1 Ответ

1 голос
/ 06 мая 2020

Чтобы ответить на ваш вопрос, вы можете использовать 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");
        }
    }
}

Или вот обходной путь, который может достичь той же цели более простым способом.

Вы можете передать параметр JVM в dev env, для instace , java -Dfolder =

В коде

if(StringUtils.isNotBlank(System.getParameter("folder")) //dev env
     dataFolder = System.getParameter("folder")
else
     dataFolder = <relative path in jar>

В зависимости от того, насколько серьезна программа, перед выпуском вы можете удалить код System.getParameter.

...