[英]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.