Monday, January 14, 2013

Como ler o arquivo MANIFEST.MF da própria aplicação

Uma aplicação Java, indepentende do tipo (web, server ou desktop), ao ser empacotada (build) deve distribuir junto com o artefato um arquivo com informações sobre o build. O arquivo MANIFEST.MF contido no diretório META-INF.

Nesse post, vou demonstrar como é possível ler o arquivo MANIFEST.MF da própria aplicação. Essa é uma implementação é muito simples, mas existe um importante detalhe.

Ao ler o MANIFEST.MF, o Java considera todos os jars disponíveis no classpath da aplicação. Por isso é importante criar algo que identifique o jar correto. Nesse exemplo vou considerar a propriedade Built-By.

import java.net.URL;
import java.util.Enumeration;
import java.util.jar.Attributes;
import java.util.jar.Manifest;

public class ApplicationProperties {

  private static Manifest manifest;

  static {
    try {
      Enumeration<URL> resources = ApplicationProperties.class.getClassLoader()
        .getResources("META-INF/MANIFEST.MF");

      while (resources.hasMoreElements()) {
        Manifest m = new Manifest(resources.nextElement().openStream());
        if ("YaW Tecnologia".equalsIgnoreCase(
              m.getMainAttributes().getValue("Built-By"))) {
          manifest = m;
          break;
        }
      }
    } catch (Exception e) {
      System.err.println("Não foi possível ler o manifest do projeto: "
        +e.getMessage());
    }
  }

  /**
   * @return null se não encontrar o arquivo.
   */
  public static Manifest getManifestFile() {
    return manifest;
  }
}

Vale notar que a estratégia em usar o Built-By torna-se inválida quando existir mais do que um jar empacotado, por YaW Tecnologia, no classpath.

@edermag

No comments: