Jar, который читает файл - PullRequest
2 голосов
/ 07 мая 2020

У меня есть код, связанный с индексом elasticsearch. На одном из шагов программе необходимо прочитать файл jsonschema, чтобы продолжить выполнение. Код хорошо работает на моем компьютере, но когда я выполняю его как файл jar внутри контейнера docker, он выдает следующую ошибку:

java.io.FileNotFoundException: dm.jsonschema (No such file or directory)

код, загружающий схему:

public class loadSchema {

private static final String JSON_SCHEMA_DOCUMENT = "dm.jsonschema";
....
public static JsonSchema tryLoadJSONSchema() {
    JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
    JsonNode cdmSchema = null;
    try {
        cdmSchema = JsonLoader.fromPath(JSON_SCHEMA_DOCUMENT);
    } catch (IOException e) {
        System.out.println(e);
        System.exit(-1);
    }

Я поместил файл jsonschema рядом с файлом jar в контейнере, но он продолжает давать мне ту же ошибку. Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 07 мая 2020

Относительный путь к File разрешается от того места, где вы запускаете исполняемый файл java (обратите внимание на user.home), а не от того места, где был расположен архив jar.

Лучшим подходом было бы экстернализировать это расположение файла с помощью системного свойства. Например, если вы определяете свойство jsonSchemaPath:

String path = Sytem.getProperty("jsonSchemaPath");
JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
JsonNode cdmSchema = JsonLoader.fromPath(path);

, вы можете изменить его в команде java:

java -jar yourcode.jar -DjsonSchemaPath=/path/to/dm.jsonschema
...