Search code examples
javaresourcebundle

Unable to locate resource outside of Jar


I've a java program as shown below:

package com.abc.myproject;

import java.util.*;

class test {
    public static void main(String[] args) 
    {
        ResourceBundle rb = ResourceBundle.getBundle("mybundle");
        String propertyValue = rb.getString("name");
        System.out.println("propertyValue="+propertyValue);
    }
}

I've this program located under C:\testing\code\src\com\abc\myproject\test.java And, I've kept mybundle.properties under C:\testing\code folder.

mybundle.properties contain one line:

name=Mike

When I run the program from command prompt as shown below, it runs perfectly fine:

C:\testing\code\src>java -cp .;c:\testing\code com.abc.myproject.test
propertyValue=Mike

Now, I created Jar file xyz.jar containing only test.class & kept this Jar in C:\testing directory & the manifest of jar contains below:

Manifest-Version: 1.0
Created-By: 1.7.0_05 (Oracle Corporation)
Main-Class: com.abc.myproject.test

In the same directory C:\testing, I kept mybundle.properties & then tried to run jar with below commands:

java -cp .;c:\testing -jar xyz.jar

But it fails to load mybundle resource & throws error:

Exception in thread "main" java.util.MissingResourceException: Can't find bundle
 for base name scheduler, locale en_US
        at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
        at java.util.ResourceBundle.getBundleImpl(Unknown Source)
        at java.util.ResourceBundle.getBundle(Unknown Source)
        at com.abc.myproject.test.main(test.java:8)

I have to keep the mybundle.properties out side of Jar since we should be able to make changes in this file without having to redeploy the Jar.

Can any one please help me in fixing this issue?

Thanks!


Solution

  • java -cp .;c:\testing -jar xyz.jar

    You cannot add to the classpath when using -jar. $CLASSPATH and -cp are ignored, and it will only use the classpath in the jar manifest.

    What you can do is run your class like this:

    java -cp .;c:\testing;xyz.jar com.abc.myproject.test