Javarevisited
Em suma, embora a Maven e a ANT sejam ferramentas de construção, a principal diferença é que a maven também fornece gerenciamento de dependência, layout de projeto padrão e gerenciamento de projeto. Na diferença entre Maven, ANT, e Jenkins, mais tarde é uma ferramenta de integração contínua que é muito mais do que uma ferramenta de construção. Você pode configurar seu ambiente CI usando Jenkins ou Hudson e automaticamente construir, testar e implantar seu projeto Java. Por último, a principal diferença entre Jenkins e Hudson, ambos originam-se do mesmo código fonte, mas um é um código fechado enquanto o outro é de código aberto. Você pode ler os detalhes neste artigo.
Agora vamos começar uma longa história, qual é a diferença entre Maven e ANT ou diferença entre Maven e Jenkins, ou Maven vs Hudson são algumas das questões frequentemente discutidas entre os desenvolvedores Java quando desenvolvedores. Bem, todos os quatro e.g. ANT, Maven, Jenkins, e Hudson são ferramentas para ajudar os desenvolvedores Java na construção, testes unitários, integração contínua (CI), e gerenciamento de projetos.
Neste artigo sobre Java, vamos explorar cada um dos Maven, ANT, Jenkins, e Hudson para ter uma idéia básica do que eles são, que benefícios eles oferecem, e como eles são usados em projetos Java JEE. Apenas para lhe dar uma ideia básica, ANT é uma ferramenta de construção bem conhecida, provavelmente a mais antiga de todas. Uma ferramenta de compilação é usada para criar produtos como arquivo JAR ou arquivo WAR a partir de fontes e recursos Java para deployment.
Maven veio depois do ANT e oferece muito mais do que uma ferramenta de compilação. A principal diferença entre ANT e Maven é que Em ANT você precisa definir tudo, ou seja, diretório fonte, diretório de compilação, diretório de destino, etc, enquanto Maven adota o princípio de convenção sobre configuração.
Isto significa que Maven tem uma estrutura de projeto predefinida, ou seja, diretório padrão para arquivos fonte, arquivos de teste e recursos. Por outro lado, Jenkins e Hudson são a ferramenta de integração contínua, que lhe dá o poder de automatizar seu processo de compilação e implantação.
Usando Jenkins ou Hudson você pode acionar a compilação sempre que o desenvolvedor submete o código, para ver se o projeto está compilando bem, para executar testes unitários, para criar uma compilação, ou mesmo implantar em ambiente de QA ou produção.
Simplesmente, você pode ter um processo de compilação diário, noturno ou semanal estabelecido em Jenkins ou Hudson. Na próxima seção, vamos entender Maven, ANT, Jenkins e Hudson com mais detalhes e entender a diferença entre eles.
Btw, se você está apenas começando com Maven, eu sugiro que você primeiro passe por um curso abrangente de Maven como Apache Maven: Beginner to Guru para aprender alguns fundamentos. Ele não só o ajudará a construir e implementar seus projetos Java e Spring Boot usando Maven, mas também aprenderá Maven em profundidade.
Maven vs ANT
Desde que Maven foi lançado, muitos programadores Java comparam Maven e ANT, o que é bastante natural. Até eu levei algum tempo para adotar Maven porque eu estava muito acostumado com o processo de construção do ANT. Eventualmente, eu percebi que Maven oferece mais conveniência como ferramenta de construção do que ANT e também reforça uma maneira comum de construir aplicações Java entre vários projetos, desenvolvedores e organizações.
Antes de mudar para Maven, eu tinha trabalhado com scripts ANT muito complexos, na verdade cada projeto que eu trabalho tem uma estrutura de construção diferente dos outros.
Para fazer um lançamento, você precisa gastar um tempo considerável compreendendo todo o processo de construção, por exemplo, de onde as bibliotecas estão vindo, estão vindo como JAR ou projeto está construindo-as durante o tempo de construção, etc. Maven resolve muitos destes problemas introduzindo uma convenção padrão e um melhor gerenciamento de dependências.
Se precisarmos comparar Maven e ANT, segue a minha lista de diferenças entre Maven e ANT :
1) Uma grande diferença entre Maven e ANT é que Maven requer menos configuração do que ANT porque funciona com base no princípio da convenção sobre a configuração e assume o padrão razoável e.g. arquivo fonte java em ${basedir}/src/main/java, recursos em ${basedir}/src/main/resources, casos de teste JUnit em ${basedir}/src/test/java, etc.
Cria também arquivos de classe Java em ${basedir}/target/classes e arquivo JAR em ${basedir}/target directory. Por outro lado, ANT requer todos esses diretórios fornecidos como configuração, normalmente no arquivo de compilação ANT, por exemplo build.xml.
2) Outra diferença significativa entre Maven e ANT é o gerenciamento de dependências. Maven introduziu o conceito de repositório, que é um lugar central para armazenar todas as bibliotecas, JARs, etc. Maven permite que você use um repositório maven central, bem como um repositório local e automaticamente baixe a dependência durante o processo de compilação.
Embora projetos baseados em ANT geralmente usam ${lib} como um diretório para armazenar dependências. Mudar e atualizar dependência é muito mais fácil no maven do que no ANT porque você não precisa baixar dependência manualmente. Ter um repositório central em toda a organização também ajuda a remover a redundância entre diferentes projetos.
3) A terceira e mais importante diferença entre Maven e ANT é que Maven oferece uma interface consistente e comum para construir projetos Java. Tudo o que você precisa fazer é baixar o projeto e executar o mvn install para construí-lo. Também conhecendo as convenções maven e olhando para o pom.xml, pode-se facilmente entender onde estão os arquivos fonte e o que são dependências do projeto.
4) Outra diferença técnica entre ANT e Maven é que a tarefa ANT não tem nenhum ciclo de vida, você precisa definir alvos e suas dependências. Enquanto a Maven tem um ciclo de vida, que é invocado quando você executa comandos como mvn install. Maven executa uma série de passos como resultado deste comando para produzir artefatos, por exemplo, arquivo JAR, que é o fim do ciclo de vida.
5) Maven também reforça uma convenção de nomes padrão para artefatos definidos usando groupId, artifactId, e versão. Também, mais uma diferença entre ANT e Maven é que Maven é mais do que apenas uma ferramenta de construção, ele atua como uma ferramenta de gerenciamento de projetos e pode gerar relatórios, etc, Embora eu ainda tenha que usar esta funcionalidade.
Maven vs Jenkins e HudsonJenkins e Hudson são ferramentas de Integração Contínua, comumente conhecidas como CI frameworks. Eles permitem que o projeto Java automatize o processo de construção e implantação. Usando ferramentas CI como Hudson ou Jenkins você pode criar builds horários ou diários automaticamente, você também pode executar automaticamente seus testes de unidade e pode implementar build para seu ambiente de QA ou produção.
Isso ajuda se você estiver trabalhando em um grande projeto e a equipe de desenvolvimento estiver espalhada por vários locais. Ferramentas CI podem acionar o build sempre que o desenvolvedor submete o código e verificar se o projeto está compilando ou não.
Por falar nisso, Jenkins e Hudson são da mesma árvore de código fonte. Hudson era um projeto original que era de código aberto e suportado pela Sun.
Quando a Oracle comprou a Sun, ela assumiu o controle sobre o nome Hudson e a plataforma logística da Hudson. Muitos contribuidores de código aberto não se sentiam confortáveis com o que resultava em Jenkins, que é bastante voltado para a comunidade.
Se precisarmos comparar Maven e Jenkins ou Hudson, o seguinte seria minha lista de diferenças entre Maven e Hudson ou Jenkins :
1) A principal diferença entre Maven e Jenkins ou Hudson é que Maven é uma ferramenta de construção que sabe como construir um projeto e Jenkins ou Hudson fornece um gatilho para construir. Você pode controlar quando acionar a construção automaticamente usando Jenkins ou Hudson ou qualquer ferramenta CI.
2) Jenkins pode usar Maven como uma ferramenta de construção. Além disso, Jenkins ou Hudson podem fazer muito mais do que apenas construir aplicações, eles podem executar todos os testes de unidade, distribuir os deliverables em servidores configurados, etc. Essencialmente a diferença é que Maven é uma ferramenta de construção enquanto Jenkins do Hudson é uma ferramenta de integração contínua.
Isso é tudo sobre a diferença entre Maven e ANT, Jenkins ou Hudson, etc. Maven é praticamente um padrão de construção de projetos Java hoje em dia e você pode customizá-lo para caber no seu ambiente de legado baseado em ANT. Algumas organizações também têm ferramentas CI como Jenkins que podem ser usadas junto com Maven para construir, testar e implantar processos automatizados.
Outras aprendizagens
Maven Fundamentals by Bryan Hansen
Maven Crash Course
Java Maven :101 Pare de Construir Programas Java do Modo Difícil!