Wiki

Convenção desenvolvedor/Convenção nomes/Maven

Nomenclatura de artefatos no Maven #

Os projetos englobados pelo Demoiselle são gerenciados através do Apache Maven, uma ferramenta altamente versátil que, entre outras funcionalidades, permite o controle do ciclo de vida dos projetos e resolve automaticamente as dependências a bilbiotecas externas.

A configuração de um projeto no Maven é realizada no arquivo "pom.xml" segundo um Modelo de Objeto de Projeto (POM) e exige a definição de pelo menos três campos:

  • grupo (groupId): este elemento indica o identificador único da organização ou grupo que criou o projeto, sendo geralmente baseado no nome de domínio qualificado da empresa (ex: javax.persistence);
  • artefato (artifactId): este elemento indica um nome único do artefato primário a ser gerado pelo projeto - tipicamente um arquivo JAR (ex: persistence-api);
  • versão (version): este elemento indica a versão do artefato gerado pelo projeto, e caso esta contenha a designação SNAPSHOT temos a indicação de que o projeto está em fase de desenvolvimento (ex: 1.0).

Um artefato típico produzido pelo Maven tem a seguinte nomenclatura: <artefato>-<versão>.<extensão>. Por exemplo: "persistence-api-1.0.jar".

Identificação do grupo #

Para o Core e as Extensões, a identificação do grupo é sempre a mesma:

br.gov.frameworkdemoiselle

Exemplo:

<groupId>br.gov.frameworkdemoiselle</groupId>
<artifactId>demoiselle-framework-parent</artifactId>
<version>2.0.0</version>

Nos outros projetos, os grupos são identificados no Maven seguindo o modelo abaixo, com a substituição do projeto pelo nome do macro-projeto em questão (ex: component, tools ou sample):

br.gov.frameworkdemoiselle.<projeto>

Exemplo:

<groupId>br.gov.frameworkdemoiselle.component</groupId>
<artifactId>demoiselle-junit</artifactId>
<version>2.0.0</version>

Identificação do artefato #

Os componentes contidos nos macro-projetos Demoiselle Framework, Demoiselle Component e Demoiselle Tools precisam obedecer à seguinte nomenclatura para os seus artefatos, com a substituição do componente ou funcionalidade pela respectiva descrição ou (ex: core, jsf, mail, report):

demoiselle-<componente_funcionalidade>

Exemplos:

<groupId>br.gov.frameworkdemoiselle</groupId>
<artifactId>demoiselle-core</artifactId>
<version>2.0.0</version>
<groupId>br.gov.frameworkdemoiselle.component</groupId>
<artifactId>demoiselle-junit</artifactId>
<version>2.0.0</version>

Já os componentes do projeto Demoiselle Sample obedecem a uma nomenclatura mais simplificada (ex: auction5, escola):

<componente>

Exemplos:

<groupId>br.gov.frameworkdemoiselle.sample</groupId>
<artifactId>escola</artifactId>
<version>2.0.0</version>

Módulos #

Podem existir situações em que artefatos sejam configurados de forma a não serem independentes, porém tenham certa relação com algum outro projeto, chamado de projeto raiz. Isso é altamente útil para o gerenciamento múltiplo de projetos associados, os quais geralmente compartilham o ciclo de vida.

No Demoiselle Framework existe o caso de um projeto pai com o grupo "br.gov.frameworkdemoiselle" e nome de artefato "demoiselle-framework-impl-build<" ser referenciado pelos seguintes artefatos do mesmo grupo:

  • core
  • extension

Todos os artefatos listados acima são construídos no mesmo momento por possuírem um único ciclo de vida, e por essa razão a versão deles deve sempre ser a mesma.

POM Parent ou Super POM #

A partir da versão 2 do Demoiselle, foi introduzido o uso do recurso Maven chamado Parent POM, esse recurso permite que varios itens de configuração contidos no arquivo POM.XML sejam compartilhados. O padrão para nomes é identificado pela funcionalidade no artifactId e usa o prefixo demoiselle e o sufixo parent.

demoiselle-<funcionalidade>-parent

Exemplos:

<groupId>br.gov.frameworkdemoiselle</groupId>
<artifactId>demoiselle-framework-parent</artifactId>
<version>2.0.0</version>
<groupId>br.gov.frameworkdemoiselle</groupId>
<artifactId>demoiselle-jsf-parent</artifactId>
<version>2.0.0</version>

Estruturação de arquivos e diretórios #

Estrutura de projetos Demoiselle #

Define o padrão de diretórios para os projetos Demoiselle armazenados no repositório de códigos.

Estrutura básica #

A estrutura utilizada no Demoiselle para organizar os diretórios segue a convenção sugerida pelo Maven, onde qualquer projeto criado deve seguir uma estrutura básica conforme o exemplo a seguir.

+- nome_projeto

 +- impl/
 | +- src/
 | | +- main/
 | | |  +- java/
 | | |  +- resources/
 | | |  +- assembly/
 | | +- test/
 | | |  +- java/
 | | |  +- resources/
 +- documentation/

Estrutura Complexa #

Caso o projeto necessite de composição de módulos e outras estruturas, definimos um padrão que deve ser seguido.

+- nome_projeto

 +- archetype/
 +- assembly/
 +- impl/
 | +- nome_modulo/
 | | +- src/
 | | |  +- main/
 | | |  |  +- java/
 | | |  |  +- resources/
 | | |  |  +- assembly/
 | | |  +- test/
 | | |  |  +- java/
 | | |  |  +- resources/
 +- parent/
 +- site/
 +- documentation/

A adição de novos diretórios, é permitida desde que não tenham nenhum padrão que já atenda.

Estrutura padrão para projetos desenvolvidos com Demoiselle #

Estrutura mínima #

A estrutura utilizada pelos projetos que usam o Demoiselle para organizar os diretórios segue a convenção sugerida pelo Maven, onde qualquer projeto criado deve seguir uma estrutura mínima conforme o exemplo a seguir.

+- project
  +- src/
  |  +- main/
  |  |  +- java/
  |  |  +- resources/
  |  |  +- webapp/
  |  |  +- assembly/
  |  |
  |  +- test/
  |  |  +- java/
  |  |  +- resources/
  |  |
  +- target/

O arquétipo demoiselle-minimal faz a geração desta estrutura.

Estrutura composta #

Caso o projeto necessite utilizar vários módulos aninhados utilizamos uma estrutura básica contendo apenas os artefatos comuns entre os módulos, sendo que cada módulo possui a mesma estrutura de um projeto simples.

+- project
   +- src/
   |  +- main/
   |  |  +- assembly/
   |  |
   |
   +- project-1
   |  +- src/
   |  |  +- main/
   |  |  |  +- java/
   |  |  |  +- webapp/
   |  |  |  +- resources/
   |  |  |  +- assembly/
   |  |  |
   |  |  +- test/
   |  |  |  +- java/
   |  |  |  +- resources/
   |  |  |
   |  |
   |  +- target/
   |   
   +- project-n
   |  +- src/
   |  |  +- main/
   |  |  |  +- java/
   |  |  |  +- webapp/
   |  |  |  +- resources/
   |  |  |  +- assembly/
   |  |  |
   |  |  +- test/
   |  |  |  +- java/
   |  |  |  +- resources/
   |  |  |
   |  |
   |  +- target/
   |   
   +- target/

O arquétipo demoiselle-jsf-jpa faz a geração deste tipo de estrutura.

Função de cada diretório na estrutura #

Diretório Descrição
impl/ diretório padrão que conterá todos os artefatos de implmentação para os projetos do Demoiselle.
documentation/ diretório padrão que conterá todos os artefatos para geração de documentação dos projetos Demoiselle
archetype/ diretório padrão que conterá os artefatos para geração de arquétipos Maven
parent/ diretório padrão que conterá os artefatos para POM parentes.
src/main/java Artefatos com código Java (.java).
src/main/resources Recursos usados pelo código Java (.xml, .properties).
src/main/assembly Configurações de empacotamento (.xml).
src/main/webapp Contém a estrutura de uma aplicação web de acordo com JEE. É opcional apenas para projetos web.
src/test/java Artefatos com código Java para teste unitário (.java)
src/test/resources Recursos usados pelo código Java durante os testes unitários (.xml, .properties).
site Artefatos de geração do site de documentação do projeto (.xml, .apt).
target Área de geração de artefatos binários do projeto, sendo que tais artefatos têm caráter temporário. Essa pasta não deve ser incluída no repositório!

Informações de pacotes Java #

Qualquer diretório que representar um subpacote no Java deve obrigatoriamente conter um arquivo com a nomenclatura package-info.java. Este arquivo deve conter o cabeçalho comum em qualquer arquivo de código Java e uma breve descrição, no formato de comentário Javadoc, sobre a função dos artefatos contidos nessa classe.

0 Anexos
5903 Visualizações
Média (0 Votos)
A média da avaliação é 0.0 estrelas de 5.
Comentários
Sem comentários ainda. Seja o primeiro.