Ошибка при указании местоположения файла свойств и журналов - PullRequest
1 голос
/ 05 ноября 2019

Я написал код для отправки сообщений в MQ, и я использую log4j для записи результатов.

Итак, у меня есть 2 файла свойств, один файл журнала, в который будут записываться журналы, и 3 файла jar.

Все мои файлы свойств и файлы выходных журналов находятся в src / main / resources, а мой основной класс (исходный код) - в src / main / java.

Мой код:

try {
    istream = new FileInputStream("log4j.properties");
    Prop.load(istream);
    istream.close();
} catch (Exception e) {
    System.out.println("error in loading log4j prop file");
}

try {
    Properties pro = new Properties();
    String filename = "config.properties";
    InputStream is = new FileInputStream(filename);
} catch (Exception a) {
    System.out.println("config file not loaded");
}

Мой POM

<plugins>
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <mainClass>com.ibm.Mq</mainClass>
                </manifest>
            </archive>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
        </configuration>
    </plugin>
</plugins>

Но когда в своем коде Java я указываю полный путь к файлам конфигурации, например, "C: /users/files/config.propertues", он работает нормально. Но я не хочу, чтобы это произошло, потому что, если я запустил его в Linux или в любой другой среде, он снова выдаст ошибку.

Я использовал приведенную ниже команду для упаковки моего jar

 mvn clean package assembly:single

Я получил ошибку ниже, когда запустил свой jar

error in loading log4j prop file
config file not loaded

1 Ответ

0 голосов
/ 06 ноября 2019

Я полагаю, что ваша проблема не связана с maven и assemnly-plugin, но ее следует сузить до способа загрузки файла из classpath.

Поскольку вы поместили все файлы свойств в папку resources, правильнаяспособ их использования в вашем коде:

try {
    istream = this.getClass().getClassLoader()
                                .getResourceAsStream("log4j.properties");
    Prop.load(istream);
    istream.close();
} catch (Exception e) {
    System.out.println("error in loading log4j prop file");
}

try {
    Properties pro = new Properties();
    String filename = "config.properties";
    InputStream is = this.getClass().getClassLoader()
                                .getResourceAsStream(filename);
} catch (Exception a) {
    System.out.println("config file not loaded");
}

Обратите внимание, что путь, по которому вы переходите к #getResourceAsStream, относится к папке resources.

Подробнее о этой теме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...