Исполняемый Jar не может найти typesafe/config application.conf в пути к классам

У меня есть приложение командной строки, которое загружает некоторые отчеты, обрабатывает их, а затем загружает данные на Google Диск. Я использую Typesafe-Config для всей магии строки мне нужны. Typesafe-Config просматривает путь к классам для моего файла application.conf и использует HOCON для сопоставления объектов конфигурации с полями в моем классе, например:

От 1_:

my.homePageUrl = "https://my.home.com"

От MyClass.java:

private static Config config = ConfigFactory.load();
private static final String HOME_URL = config.getString("my.homePageUrl");

Я использую maven-shade-plugin для создания исполняемого файла .jar для простого развертывания на удаленном сервере. Плагин выглядит так:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <manifestEntries>
                                <Main-Class>com.my.reports.ReportRunner</Main-Class>
                                <Class-Path>~/configs/application.conf</Class-Path>
                            </manifestEntries>
                        </transformer>
                    </transformers>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

Проблема в том, что когда я запускаю исполняемый файл .jar, application.conf не обнаруживается в моем пути к классам (я думаю, это также может быть ошибкой в ​​коде безопасного типа). Все это отлично работает в Intellij.

dustinevan@iMac:~/bin$ java -jar my-reports-1.0-SNAPSHOT.jar 
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'my'
    at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:147)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)
    at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)
    at com.typesafe.config.impl.SimpleConfig.getList(SimpleConfig.java:212)
    at com.typesafe.config.impl.SimpleConfig.getHomogeneousUnwrappedList(SimpleConfig.java:271)
    at com.typesafe.config.impl.SimpleConfig.getStringList(SimpleConfig.java:329)
    at com.stellarliving.reports.ecp.ReportRunner.<clinit>(ReportRunner.java:19)

dustinevan@iMac:~/configs$ ls
total 8
-rw-r--r--@  1 dustinevan  staff  1520 Jun 13 01:16 application.conf

Я пробовал МНОГИЕ перестановки и много читал, чтобы решить эту проблему, любая помощь будет принята с благодарностью.


person dustinevan    schedule 13.06.2015    source источник


Ответы (2)


Так как у меня была такая же проблема...

-jar переопределяет все настройки пути к классам, поэтому виден только jar. -Dconfig.trace=loads покажет то, что видит java.

Мы хотим, чтобы application.conf был в пути к классам, а также jar, поэтому: java -cp .:my-reports-1.0-SNAPSHOT.jar full.path.to.main.Main сделал свое дело для меня. application.conf найден и переопределяет reference.conf в банке.

person Lothar    schedule 23.06.2015

У меня также была эта проблема. Я заметил, что вы используете объявление Class-Path в затененной конфигурации, поэтому я объединил ответ Лотара с вашей информацией и добавил:

<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    <manifestEntries>
        <Main-Class>com.my.reports.ReportRunner</Main-Class>
            <Class-Path>.</Class-Path>
    </manifestEntries>
</transformer>
person Mateusz Odelga    schedule 02.11.2015