Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: ${user.name} Build-Jdk: ${java.version} Specification-Title: ${project.name} Specification-Version: ${project.version} Specification-Vendor: ${project.organization.name} Implementation-Title: ${project.name} Implementation-Version: ${project.version} Implementation-Vendor-Id: ${project.groupId} Implementation-Vendor: ${project.organization.name}
To set up a maven project pom file is pretty easy:
org.apache.maven.plugins maven-war-plugin true true ${build.number}
Where build.number variable gets supplied by build server in arbitrary format, e.g. for TeamCity build server:
@Controller public class ProjectInfoController { @RequestMapping("/info") public ModelAndView getProjectInfo(HttpServletRequest request, HttpServletResponse response) throws IOException { ModelAndView modelAndView = new ModelAndView("projectInfoView"); ServletContext servletContext = request.getSession().getServletContext(); Properties properties = new Properties(); InputStream is = servletContext.getResourceAsStream("/META-INF/MANIFEST.MF"); properties.load(is); modelAndView.addObject("buildBy",properties.getProperty("Built-By")); modelAndView.addObject("buildJdk",properties.getProperty("Build-Jdk")); modelAndView.addObject("specificationVersion",properties.getProperty("Specification-Version")); modelAndView.addObject("specificationTitle",properties.getProperty("Specification-Title")); modelAndView.addObject("implementationVendor",properties.getProperty("Implementation-Vendor-Id")); modelAndView.addObject("buildNumber",properties.getProperty("Build-Number")); return modelAndView; } }
Accessing MANIFEST.MF in JAR file has a different approach. Motivation taken from Spring source code:
Package package = someClass.getPackage( ); String version = package.getImplementationVersion();
JSP page or other presentation layer shouldn’t be a problem for anyone.