Acessando informações de um projeto maven

Neste post vou mostrar como podemos acessar informações de um projeto maven a partir do arquivo pom.xml e exibir estas informações em uma aplicação web.

iremos utilizar como exemplo o seguinte pom.xml:

<project xmlns=”http://maven.apache.org/POM/4.0.0&#8243; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”&gt;

…..

…..

<properties>
 <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <mojarra.version>2.1.5</mojarra.version>
 <myfaces.version>2.1.7</myfaces.version>
 <myfaces.codi.version>1.0.5</myfaces.codi.version>
 <primefaces.version>3.3</primefaces.version>
 <primefaces-ext.version>0.4.0</primefaces-ext.version>
 <primefaces.theme.version>1.0.5</primefaces.theme.version>
 <conventions.version>0.7-SNAPSHOT</conventions.version>
 <openwebbeans.version>1.1.4</openwebbeans.version>
 <hibernate.version>4.1.3.Final</hibernate.version>
 <netbeans.hint.deploy.server>gfv3ee6</netbeans.hint.deploy.server>
</properties>
<dependencies>
  //dependencias
</dependencies>
<build>
 <resources>
 <resource>
 <directory>src/main/resources</directory>
 <filtering>true</filtering>
 </resource>
 </resources>
</build>
...
...
</project>

Para conseguirmos acessar as propriedades (declaradas dentro da tag properties) do pom.xml devemos informar a localização do diretório resources da nossa applicação atravéz da tag <resources> e além disto devemos criar um arquivo .properties neste diretório(src/main/resources), e informar  a entrada abaixo:

application.properties = ${project.properties}

este arquivo será o elo entre nossa aplicação e o arquivo pom.xml, é o famoso arquivo de bundle utilizado para internacionalização.

Com as configurações acima agora somos capazes de acessar as propriedades do arquivo pom, segue o código do bean que irá acessar as propriedades e guarda-las em um mapa:

/**
 *
 * @author rmpestano
 */
@Named
@ApplicationScoped
public class ApplicationInfoMBean implements Serializable{

   private Map<String,String> infoMap = new HashMap<String, String>();
   @Inject
   private ResourceBundle resourceBundle;

   @PostConstruct
   public void initialize(){

     String appProperties = resourceBundle.getString("application.properties");
     appProperties = appProperties.substring(1, appProperties.indexOf("}"));
     String[] arrayProperties = appProperties.split("[\\s,]+");//separa cada propriedade por vírgula ignorando espaços
     for (String prop : arrayProperties) {
       String[] keyValue = prop.split("=");  
       infoMap.put(keyValue[0], keyValue[1]);//coloca nome da propripriedade na chave e a versão no valor do mapa
      }
   }
  public Map<String, String> getInfoMap() {
   return infoMap;
  }
  public void setInfoMap(Map<String, String> infoMap) {
   this.infoMap = infoMap;
  }

}

seguem imagens mostrando como as propriedades do pom.xml chegam no bean

:

Após popularmos o mapa de propriedades nós acessamos esse mapa na tela passando o nome da propriedade como chave e o mapa nos retorna a versão como valor, segue o código da pagina .xhtml

Mojarra #{applicationInfoMBean.infoMap['mojarra.version']}, Primefaces #{applicationInfoMBean.infoMap['primefaces.version']},....e por aí vai

Agora quando atualizarmos as dependencias do projeto não precisamos mais alterar a tela que exibe essas informações.

Advertisements