I have build a jar file of classes and configuration files. The configuration.yml file is located in root of the jar. When I try to run the application using the following command:
java -jar target/drop-wizard-0.0.1-SNAPSHOT.jar server configuration.yml
I get the exception below. How can I specify file located in jar from command prompt?
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>
It is possible to load a yaml file from a class path since Dropwizard 0.9.1 version.
Just configure Application
with ResourceConfigurationSourceProvider
in the similar manner:
public class MicroUsersApplication extends Application<MicroUsersConfiguration> {
@Override
public void initialize(Bootstrap<MicroUsersConfiguration> bootstrap) {
bootstrap.setConfigurationSourceProvider(
new ResourceConfigurationSourceProvider());
}
}
And for configuration.yml
in the root of a jar:
java -jar target/drop-wizard-0.0.1-SNAPSHOT.jar server configuration.yml
For configuration.yml
in the /com/some/configuration.yml
from the jar root
java -jar target/drop-wizard-0.0.1-SNAPSHOT.jar server com/some/configuration.yml
Please, note — there is not a leading /
in the path com/some/configuration.yml
. Looks like, this behaviour will be kept till 1.1.0 release: Fix #1640: ResourceConfigurationSourceProvider - process a path to the resource in the more sophisticated way.
If you use more recent Dropwizard version, you can implement your own ResourceConfigurationSourceProvider
— it is pretty simple.
configuration.yml
is expected to be in the working directory i.e. on the filesystem, because this is how you try to read it. If you want to read it from jar file or from classpath in general you need to use getResource or getResourceAstream methods. (please see this similar question and answer)
EIDT
If you want to read the config from a resource inside your jar then you might want to configure your application to use UrlConfigurationSourceProvider instead of FileConfigurationSourceProvider and pass it the URL which you can obtain from getResource, the open method of the underlying interface expects a String
as parameter, so you will need to use URL#toString on the result of getResource.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With