Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.io.FileNotFoundException: File configuration.yml not found

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>
like image 259
Kartik Jajal Avatar asked Nov 30 '22 18:11

Kartik Jajal


2 Answers

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.

like image 62
v.ladynev Avatar answered Dec 03 '22 06:12

v.ladynev


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.

like image 30
A4L Avatar answered Dec 03 '22 08:12

A4L