As 5 principais ideias e tópicos interessantes de projetos de vários módulos Maven para iniciantes [2022]

Publicados: 2021-05-27

Como qualquer projeto fica mais complexo e em camadas, a maneira correta de gerenciá-lo é dividindo-o em diferentes módulos. No Maven, embora seja possível vincular esses vários projetos como dependências, isso torna o processo de compilação muito mais complexo. Portanto, a abordagem preferida é estruturar o projeto como multi-modular e passar o restante para o Maven.

Índice

Benefícios do uso de multimódulos no Maven

A vantagem significativa de usar multimódulos em vez de injeção de dependência ou qualquer outro procedimento é que reduz a duplicação. Para entender isso melhor, suponha que você esteja trabalhando em um aplicativo que consiste em dois módulos – digamos, o módulo de back-end e o módulo de front-end.

Se você trabalhar em ambos os módulos e alterar certas funcionalidades que afetam ambos os módulos, você precisará construir ambos os módulos ou componentes isoladamente sem uma ferramenta de construção especializada. Ou você deve escrever um script para compilar o código, executar testes e exibir os resultados finais.

Agora, se a complexidade aumentar ainda mais e seu projeto tiver mais de dois módulos, ficará progressivamente mais difícil realizar essa tarefa sem uma ferramenta de compilação especializada. Além disso, em problemas do mundo real, seus projetos podem exigir alguns plug-ins do Maven para executar algumas operações cruciais durante todo o ciclo de vida da compilação, compartilhar dependências ou incluir outros projetos de BOM.

Como resultado desses desafios, os multimódulos do Maven são extremamente úteis e permitem que você construa os módulos do aplicativo em uma única linha de comando. Ele também permite que você compartilhe uma grande quantidade de dados e configuração entre vários módulos sem problemas.

Leia também: Resposta à pergunta da entrevista Maven

Termos-chave para saber sobre projetos de vários módulos no Maven

1. POM pai (módulo de objeto de projeto)

Cada arquivo pom.xml no Maven – para suporte de herança – tem um POM pai, conhecido como Super POM. Isso pode ser localizado nos binários do Maven e você também pode mesclar os dois arquivos para criar o POM efetivo.

Assim, você pode criar seu próprio arquivo pom.xml para servir como pai para seu projeto. Depois de fazer isso, você pode adicionar todas as dependências e configurações, defini-las como pai dos módulos filho e habilitar a herança. Exceto pela herança, o Maven também fornece agregação. O POM Pai que aproveita a funcionalidade de agregação é conhecido como POM agregado – esse tipo de POM declara os módulos filho explicitamente no arquivo pom.xml.

2. Submódulos

Os subprojetos, também conhecidos como submódulos, podem ser entendidos como módulos Maven padrão que herdam do POM pai. Usando herança, os módulos compartilham várias dependências e configurações. No entanto, se você precisar compilar o projeto rapidamente, precisará declarar explicitamente os submódulos no POM pai, tornando-o o POM agregado.

3. O Projeto Simples de Múltiplos Módulos

App e util são dois módulos contidos no The Simple Multi-Module Project. O módulo util é necessário para fornecer um método estático para unir ou anexar diferentes strings usando a biblioteca Apache Commons Lang, e o módulo app é necessário para chamar o módulo util. Aqui está um trecho do arquivo app.java:

simple-multi/app/src/main/java/app/App.java

aplicativo de classe pública {

public static void main(String[] args) {

System.out.println(new App().greet(“Mundo!”));

}

public String saudar(String name) {

return Util.join(“Olá “, nome);

}

}

Para construir o projeto, execute

$ cd simples-multi

teste limpo $ mvn

O construtor de código do Maven constrói ambos os módulos do seu projeto na ordem correta, realiza os testes necessários e gera os resultados em um formato de resumo facilmente compreensível, como abaixo:

4. Estrutura de um Projeto Multi-Módulo

Aqui está o layout de um projeto Multi-Module simples:

O diretório simple-multi é o diretório raiz e está presente no topo de todo o projeto. Ele contém o POM de nível superior (POM pai), mas esse POM pai não tem nenhuma pasta de origem.

O diretório de nível superior também contém app e util, que são projetos Maven regulares com diretórios e arquivo pom.xml.

O POM de nível superior e o POM do módulo diferem ligeiramente do POM normal. Vejamos em detalhes o que eles contêm:

5. POM de nível superior

Um POM pai ou um POM de nível superior é exigido pelo Maven Multi-Module Project no diretório raiz.

O POM de nível superior define aspectos importantes e coordenadas do projeto como artefatoID, versão e groupID, como em qualquer projeto normal. No entanto, o tipo de embalagem para isso não está no formato usual de guerra ou jar, mas como um pom. Isso ocorre porque o módulo de nível superior não contém nenhum diretório de origem adicional. Os elementos módulos/módulos adicionam os módulos app e util.

O conteúdo deste arquivo inclui:

simple-multi/pom.xml

<project xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

<modelVersion>4.0.0</modelVersion>

<groupId>org.codetab</groupId>

<artifactId>simples-múltiplos</artifactId>

<version>1.0</version>

<packaging>pom</packaging>

<módulos>

<module>aplicativo</module>

<module>util</module>

</modules>

</projeto>

Para resumir, o POM de nível superior especifica o tipo de empacotamento pom e lista explicitamente todos os submódulos.

Lembre-se de que você não precisa se preocupar com a ordenação ao declarar submódulos no POM pai, pois o Maven usa um Reactor para ordenar os módulos listados corretamente. No simple-multi, o maven cria o módulo util e, em seguida, o aplicativo, pois o aplicativo depende do util.

5. Módulo POM

A pasta Module POM contém uma pasta de origem regular e seu próprio arquivo pom.xml. O conteúdo deste util/pom.xml é:

util/pom.xml

<project xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

<modelVersion>4.0.0</modelVersion>

<pai>

<groupId>org.codetab</groupId>

<artifactId>simples-múltiplos</artifactId>

<version>1.0</version>

</parent>

<artifactId>util</artifactId>

<propriedades>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

</propriedades>

<dependências>

<dependência>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.6</version>

</dependency>

<dependência>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

<scope>teste</scope>

</dependency>

</dependencies>

</projeto>

Não há necessidade de especificar o groupID e a versão do módulo, pois eles serão herdados do pai. O bloco dependencies/dependency define as dependências do módulo util – commons-lang3 e JUnit.

Agora, vamos ver o app/pom.xml, que é bem parecido com o util/pom.xml, exceto pelo bloco de dependências, que é mostrado abaixo:

app/pom.xml

….

<dependências>

<dependência>

<groupId>org.codetab</groupId>

<artifactId>util</artifactId>

<version>1.0</version>

</dependency>

….

</dependencies>

O módulo app usa métodos do módulo util e, para isso, o app/pom.xml especifica util como a dependência.

Para resumir todas as coisas explicadas acima:

O projeto de nível superior (projeto pai),

  • Define pom.xml de nível superior, que especifica todas as coordenadas e submódulos e define o tipo de empacotamento como pom.
  • Contém as pastas de módulos adicionais.
  • Não contém pastas de origem.

Cada uma das pastas do módulo nada mais é do que diretórios regulares do projeto Maven. No entanto, o arquivo pom.xml contém:

  • O elemento pai especifica o pai do módulo.
  • As coordenadas do módulo são especificadas no elemento artifactID. GroupID e versão não são mencionados, pois são herdados das coordenadas pai.
  • A dependência, se um módulo depende de outro, é mencionada no elemento dependencies/dependency.

Executando o Projeto Multi-Módulo

O comando $ mvn clean package pode ser usado para compilar, testar e empacotar o multi-módulo. No entanto, para executá-lo com o maven-exec-plugin requer as seguintes etapas:

Execute os seguintes comandos:

$ cd simples-multi

$ mvn instalação limpa

$ mvn exec:java -pl app -Dexec.mainClass=app.App

O comando install instala os módulos em seu repositório local, onde você pode executar o projeto. A opção -pl app informa o plugin exec sobre o módulo app e executa sua classe app.App. Sem instalação, o processo de compilação falha, pois o Maven não pode baixar e resolver a dependência do módulo util.

No entanto, é bastante complicado instalar o projeto em um repositório local todas as vezes antes de cada execução, especialmente na fase de desenvolvimento. Para facilitar isso, você pode executar diretamente o multimódulo no Eclipse IDE sem executar a etapa de instalação.

Aprenda cursos de desenvolvimento de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Conclusão

Esperamos que este artigo tenha ajudado você a começar com o processo Maven Multi-Module. Como acontece com qualquer coisa nova, trata-se apenas de pegar o jeito inicial. Depois de entender a estrutura e o funcionamento básicos, você estará no caminho certo para gerenciar vários módulos no Maven.

Se você estiver interessado em aprender mais sobre desenvolvimento de software full-stack, confira o Programa PG Executivo em Desenvolvimento de Software – Especialização em Desenvolvimento Full Stack do upGrad & IIIT-B, que é projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, 9 + projetos e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.

O que são projetos multimódulos?

Os multimódulos permitem agrupar artefatos comuns em um único módulo para reduzir o número de módulos necessários para construir e implementar um projeto. Projetos de vários módulos podem ser construídos a partir de dois ou mais módulos definindo um relacionamento pai-filho entre esses módulos. O módulo pai de um projeto de vários módulos é chamado de módulo raiz. O módulo filho de um projeto de vários módulos é chamado de submódulo. O módulo raiz é a pedra angular de uma compilação de vários módulos. Os módulos filho não podem ser construídos sozinhos, eles devem ser construídos junto com o módulo raiz.

O que é um arquivo de modelo de objeto de projeto no maven?

Um arquivo de modelo de objeto de projeto (POM) é um arquivo que descreve um projeto. É a unidade fundamental de trabalho pela qual os desenvolvedores publicam artefatos em um repositório. Um modelo de objeto de projeto é um arquivo de texto simples que define um projeto, lista seus componentes e define o que eles fazem. O modelo de objeto do projeto é um componente chave da estrutura de gerenciamento de projetos de software Maven. É um tipo especial de documento XML do qual um projeto Maven é composto. Um arquivo pom pode ser pensado como uma descrição de um projeto. Ele informa ao Maven sobre o que é o projeto, bem como uma descrição de cada um dos módulos do projeto, suas dependências e versões. Módulos são os blocos de construção de um projeto Maven. Os módulos e suas dependências são usados ​​para construir o projeto final.

Como criar um projeto multi-módulo maven?

Para fazer um projeto de vários módulos maven, você precisa definir um pai pom e certificar-se de que todos os submódulos o herdem. Também é importante notar que você também pode colocar todos os submódulos em um único repositório e apontar o pom pai para isso. Um projeto multimódulo maven é composto por um pom pai e um ou mais submódulos. O pom pai pode definir os metadados do projeto maven de vários módulos, como ID do artefato, versão, empacotamento e dependências. Os submódulos podem herdar os metadados do pai, e o pom pai pode definir a configuração de alto nível do projeto, como a organização e a descrição do projeto.