[英]java.io.FileNotFoundException: File configuration.yml not found
我已經構建了一個類和配置文件的jar文件。 configuration.yml文件位於jar的根目錄中。 當我嘗試使用以下命令運行應用程序時:
java -jar target/drop-wizard-0.0.1-SNAPSHOT.jar server configuration.yml
我在下面得到了例外。 如何從命令提示符指定位於jar中的文件?
Exception in thread "main" java.io.FileNotFoundException: File configuration.yml not found <br>
at io.dropwizard.configuration.FileConfigurationSourceProvider.open(FileConfigurationSourceProvider.java:14)<br>
at io.dropwizard.configuration.ConfigurationFactory.build(ConfigurationFactory.java:75)<br>
at io.dropwizard.cli.ConfiguredCommand.parseConfiguration(ConfiguredCommand.java:114)<br>
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:63)<br>
at io.dropwizard.cli.Cli.run(Cli.java:70)<br>
at io.dropwizard.Application.run(Application.java:72)<br>
at com.flightnetwork.dropwizard.example.HelloWorldApplication.main(HelloWorldApplication.java:10)<br>
從Dropwizard 0.9.1版本開始,可以從類路徑加載yaml文件。
只需使用ResourceConfigurationSourceProvider
以類似的方式配置Application
:
public class MicroUsersApplication extends Application<MicroUsersConfiguration> {
@Override
public void initialize(Bootstrap<MicroUsersConfiguration> bootstrap) {
bootstrap.setConfigurationSourceProvider(
new ResourceConfigurationSourceProvider());
}
}
對於jar的根目錄中的configuration.yml
:
java -jar target/drop-wizard-0.0.1-SNAPSHOT.jar server configuration.yml
對於configuration.yml
在/com/some/configuration.yml
從罐中根
java -jar target/drop-wizard-0.0.1-SNAPSHOT.jar server com/some/configuration.yml
請注意 - 路徑com/some/configuration.yml
沒有前導/
。 看起來,這種行為將一直保持到1.1.0版本: 修復#1640:ResourceConfigurationSourceProvider - 以更復雜的方式處理資源的路徑 。
如果你使用更新的Dropwizard版本,你可以實現自己的ResourceConfigurationSourceProvider
- 它非常簡單。
configuration.yml
應該在工作目錄中,即在文件系統上,因為這是你嘗試閱讀它的方式。 如果你想從jar文件或類路徑中讀取它,你需要使用getResource或getResourceAstream方法。 (請看這個類似的問題和答案 )
EIDT
如果您想從jar中的資源讀取配置,那么您可能希望將應用程序配置為使用UrlConfigurationSourceProvider而不是FileConfigurationSourceProvider並將其傳遞給您可以從getResource獲取的URL ,底層接口的open方法需要String
為參數,所以你需要在getResource的結果上使用URL#toString 。
嘗試使用絕對路徑執行命令,顯然configuration.yml不在run文件夾中。
configuration.yml
在/tmp
示例
java -jar target/drop-wizard-0.0.1-SNAPSHOT.jar server /tmp/configuration.yml
我不認為有可能在jar中輸入dropwizard yml文件。 它需要在文件系統AFAIK上。 更新 :看起來它是可能的,但我離開了它,因為它仍然是一個解決方案。
如果您不想將配置詳細信息公開給外部,則需要使用Configuration類通過在構造函數中設置默認值來配置它。 它變得非常難看,因為它是如此嵌套。 我不喜歡dropwizard如何自己強制執行yml依賴。
我用於測試的一個例子:
public class TestConfiguration extends Configuration {
public TestConfiguration() {
super();
// The following is to make sure it runs with a random port. parallel tests clash otherwise
((HttpConnectorFactory) ((DefaultServerFactory) getServerFactory()).getApplicationConnectors().get(0)).setPort(0);
// this is for admin port
((HttpConnectorFactory) ((DefaultServerFactory) getServerFactory()).getAdminConnectors().get(0)).setPort(0); } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.