簡體   English   中英

可執行Jar在類路徑上找不到typesafe / config application.conf

[英]Executable Jar cannot find typesafe/config application.conf on classpath

我有一個命令行應用程序,可以下載一些報告,進行處理,然后將數據上傳到Google雲端硬盤。 我將Typesafe-Config用於所需的所有魔術字符串。 Typesafe-Config在我的application.conf文件的類路徑上查找並使用HOCON將配置對象映射到我的類中的字段,如下所示:

~/configs/application.conf

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

我嘗試了許多排列,並做了很多閱讀來解決這個問題,我們將不勝感激。

因為我有同樣的問題...

-jar會覆蓋所有類路徑設置,因此只能看到jar。 -Dconfig.trace=loads將顯示Java看到的內容。

我們想要classpath和jar上的application.conf,所以: java -cp .:my-reports-1.0-SNAPSHOT.jar full.path.to.main.Main為我完成了竅門。 找到了application.conf並覆蓋了jar中的reference.conf。

我也有那個問題。 我注意到您在陰影配置中使用了Class-Path聲明,因此我將Lothar答案與您的信息合並並添加:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM