Question: I'm trying to read my META-INF/MANIFEST.MF file from my Spring Boot web app (contained in a jar file).

I'm trying the following code:

```
        InputStream is = getClass().getResourceAsStream("/META-INF/MANIFEST.MF");

        Properties prop = new Properties();
        prop.load( is );

```

But apparently there is something behind the scenes in Spring Boot that a different manifest.mf is loaded (and not my own located in META-INF folder).

Does anyone know how I can read my manifest app in my Spring Boot app?

**UPDATE:** After some research I noticed that using the usual way to read a manifest.mf file, in a Spring Boot application this is the Jar that is being accessed

```
org.springframework.boot.loader.jar.JarFile

```

Answer: 
I use [java.lang.Package](http://docs.oracle.com/javase/7/docs/api/java/lang/Package.html) to read the `Implementation-Version` attribute in spring boot from the manifest.

```
String version = Application.class.getPackage().getImplementationVersion();

```

The `Implementation-Version` attribute should be configured in `build.gradle`

```
jar {
    baseName = "my-app"
    version =  "0.0.1"
    manifest {
        attributes("Implementation-Version": version)
    }
}

```
Pretty much all jar files come with a manifest file, so your code is returning the ***first* file** it can find **in the classpath**.

Why would you want the manifest anyway? It's a file used by Java. Put any custom values you need somewhere else, like in a `.properties` file next to you `.class` file.

**Update 2**

As mentioned in a comment below, *not* in the question, the real goal is the version information from the manifest. Java already supplies that information with the [`java.lang.Package`](http://docs.oracle.com/javase/7/docs/api/java/lang/Package.html) class.

Don't try to read the manifest yourself, even if you could find it.

**Update 1**

Note that the manifest file is *not* a `Properties` file. It's structure is much more complex than that.

See the example in the java documentation of the [JAR File Specification](http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Signature_Validation).

```none
Manifest-Version: 1.0
Created-By: 1.7.0 (Sun Microsystems Inc.)

Name: common/class1.class
SHA-256-Digest: (base64 representation of SHA-256 digest)

Name: common/class2.class
SHA1-Digest: (base64 representation of SHA1 digest)
SHA-256-Digest: (base64 representation of SHA-256 digest)

```

As you can see, `Name` and `SHA-256-Digest` occurs more than once. The `Properties` class cannot handle that, since it's just a `Map` and the keys have to be unique.