title: JAR Manifest file - Difference between Specification and Implementation
body: <p>I want to add versioning information (and possibly some other metadata about the jar) to a jar of a library I created. However, I am not sure what attribute to use. I found that the <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html" rel="noreferrer">specification</a> as well the <a href="http://docs.oracle.com/javase/tutorial/deployment/jar/packageman.html" rel="noreferrer">documentation</a> explain that there can be a <code>Specification-Version</code> and an <code>Implementation-Version</code> (and a title and vendor for both). But neither properly explains what the difference between Specification and Implementation is. </p>
  
  <p>I also looked at different examples. </p>
  
  <ul>
  <li>The one from the <a href="http://docs.oracle.com/javase/tutorial/deployment/jar/packageman.html" rel="noreferrer">documentation</a> uses a human readable name for the Specification-Title and a package name for the Implementation-Title. A dot-separated version number is used for the Specification-Version while a simple build number is used for the Implementation-Version.</li>
  <li>The gradle tutorial seems to just use an Implementation-Version and a human-readable string for the Implementation-Title</li>
  <li>In <a href="https://stackoverflow.com/questions/13222728/does-the-manifest-mf-file-show-the-version-of-the-jar">another question</a> I found an example in which there were several Implementation-Versions for different packages. </li>
  </ul>
  
  <p>What exactly is the difference between the Specification and Implementation Metadata here? How should these different attributes (especially the version numbers) be used? How does it make sense that the vendor of the specification and the implementation are different?</p>
  
  <p>Does it even play a role what I put in there?</p>