Search code examples
javajarresourcesclasspathclassloader

JAR manifest Class-Path, use folder instead of jar


I have the following directory structure

--conf
|   |
|   --foo.properties
|
--lib
   |
   --application.jar

In my application.jar's MANIFEST.mf file I have the following entry: Class-Path: ../conf/

In the class inside jar (called by the main method of jar) I try to load the foo.properties file as classpath resource using following code

URL properties = this.getClass().getClassLoader().getResource("foo.properties");

However, the resource couldn't be found from the classpath. Why isn't the Class-Path attribute working in the jar manifest? Have I misunderstood how it affects the application classloader classpath?

I'm running the application with following command

java -jar application.jar


Solution

  • It should work. Not sure, whether your MANIFEST.mf is formatted properly. I generated mine with Maven and it works. This is how my MANIFEST.mf looks like,

    Manifest-Version: 1.0
    Archiver-Version: Plexus Archiver
    Built-By: john.doe
    Class-Path: ../conf/
    Created-By: Apache Maven 3.3.9
    Build-Jdk: 1.8.0_92
    Main-Class: com.basaki.misc.clazzpath.FindResource
    

    You can find a complete example here.