O que Maven faz, na teoria e na prática? Quando vale a pena usá-lo? [fechadas]

156

Estou prestes a iniciar um projeto Java apenas para a prática. Eu li sobre o Maven, mas na verdade não entendo quando ele deve ser usado.

Você pode me dar algumas dicas práticas? Maven ajuda muito? O que o Maven realmente faz pelo meu projeto?

Piotr Krysiak
fonte
Hej, dê uma olhada nesta minha pergunta sobre Maven, Spring e Roo. Eu usei muito o Maven ao trabalhar com o Eclipse e para acelerar o tempo de desenvolvimento. Mas existem alguns problemas. Eu acho que você precisa entender o sistema de anotação Java junto com o Maven. Mas dê uma olhada na pergunta que eu
vinculei
O @ArtB fornece uma boa explicação sobre o que é o Maven. No entanto, como digo no meu comentário à resposta dele, não acho que você deva usá-lo. Se você deseja uma ferramenta de construção, use Gradle. Faça o download, instale-o e, em seu projeto, crie um arquivo chamado build.gradleque contém apenas uma linha dizendo apply plugin: 'java'. Supondo que seu código-fonte esteja no local usual ( src/main/java, testes de unidade em src/test/java), agora você pode criar, testar e empacotar seu código dizendo gradle build. Fácil!
Tom Anderson
2
Para usar Gradle você vai precisar aprender Groovy e você definitivamente vai se deparar com projeto usando Maven por isso é ainda vale a pena aprender. Além disso, entender o Maven tornará mais fácil o entendimento de outras ferramentas que vieram depois dele.
Sled
O que o Maven tem a ver com as anotações Java?
Sled
1
+1 para Gradle, não só é mais perto de casa para desenvolvedores Java, é possível reutilizar artefatos maven e pode fazer não padrão constrói facilmente stackoverflow.com/questions/1163173/...
Kalpesh Soni

Respostas:

183

O que faz

O Maven é uma "ferramenta de gerenciamento de compilação", que serve para definir como seus .javaarquivos são compilados .class, empacotados em .jar( .warou .ear) arquivos, (pré / pós) processados ​​com ferramentas, gerenciando seu CLASSPATHe todos os outros tipos de tarefas necessárias para construa seu projeto. É semelhante ao Apache Ant ou Gradle ou Makefiles em C / C ++, mas tenta ser completamente independente de que você não precisa de ferramentas ou scripts adicionais incorporando outras tarefas comuns, como baixar e instalar as bibliotecas necessárias, etc.

Ele também foi projetado em torno do tema "compilar portabilidade", para que você não tenha problemas, pois o mesmo código com o mesmo buildscript funciona em um computador, mas não em outro (esse é um problema conhecido, temos VMs do Windows 98 máquinas, já que não conseguimos compilar alguns de nossos aplicativos Delphi em nenhum outro lugar). Por esse motivo, também é a melhor maneira de trabalhar em um projeto entre pessoas que usam IDEs diferentes, pois é difícil importar scripts Ant gerados por IDE para outros IDEs, mas hoje todos os IDEs compreendem e dão suporte ao Maven ( IntelliJ , Eclipse e NetBeans ) Mesmo que você não goste do Maven, ele acaba sendo o ponto de referência para todas as outras ferramentas de criação modernas.

Por que você deve usá-lo

Há três coisas sobre o Maven que são muito legais.

  1. O Maven (depois de declarar quais você está usando) fará o download de todas as bibliotecas que você usa e as bibliotecas que elas usam automaticamente para você. Isso é muito bom e facilita muito o manuseio de muitas bibliotecas. Isso permite evitar o "inferno das dependências" . É semelhante ao Ivy do Apache Ant .

  2. Ele usa " Convenção sobre configuração " para que, por padrão, você não precise definir as tarefas que deseja executar. Você não precisa escrever uma etapa "compilar", "testar", "empacotar" ou "limpar", como faria no Ant ou no Makefile. Basta colocar os arquivos nos locais em que o Maven espera e eles devem funcionar imediatamente.

  3. O Maven também possui muitos plug-ins agradáveis ​​que você pode instalar para lidar com muitas tarefas de rotina, desde a geração de classes Java a partir de um esquema XSD usando JAXB até a medição da cobertura de teste com o Cobertura . Basta adicioná-los ao seu pom.xmle eles se integrarão a tudo o que você deseja fazer.

A curva de aprendizado inicial é íngreme, mas (quase) todo desenvolvedor Java profissional usa o Maven ou deseja. Você deve usar o Maven em todos os projetos, embora não se surpreenda se demorar um pouco para se acostumar e que às vezes você deseja fazer as coisas manualmente, pois aprender algo novo às vezes dói. No entanto, quando você realmente se acostumar com o Maven, verá que o gerenciamento de compilação quase não leva tempo.

Como começar

O melhor lugar para começar é " Maven in 5 Minutes ". Isso permitirá que você inicie um projeto pronto para codificar com todos os arquivos e pastas necessários (sim, eu recomendo usar o arquétipo de início rápido, pelo menos no início).

Depois de começar, você precisará entender melhor como a ferramenta deve ser usada. Por esse motivo, " Better Builds with Maven " é o lugar mais completo para entender como ele funciona, no entanto, " Maven: The Complete Reference " está mais atualizado. Leia o primeiro para entender, mas use o segundo para referência.

Trenó
fonte
12
Existem inúmeros desenvolvedores profissionais de Java que não usam o Maven e estão felizes por não usarem; alguns deles simplesmente rejeitam sua complexidade e inflexibilidade e se mantêm com Ant ou similar, mas um número crescente deles são pessoas que passaram para os sucessores do Maven, como Gradle e Buildr. Esses sucessores herdam do Maven a idéia de fornecer um conjunto poderoso de etapas de compilação prontas para uso, mas tornam imensamente mais fácil adicionar etapas personalizadas. Dada a sua existência, sinceramente não acho que exista qualquer razão para usar o Maven em novos projetos.
Tom Anderson
5
Sempre há a questão de quantos detalhes colocar em uma resposta, mas se você é um desenvolvedor Java comum, em seu escritório, provavelmente é Maven ou um inferno de formiga de merda (Ant + bash + perl + constrói um computador configurado com caminhos mágicos). Se você é um dos poucos sortudos que trabalha com desenvolvedores de A + em um bom ambiente com liberdade de escolha, há outras opções (Gradle é uma delas). Mas se você estiver trabalhando em um local comum, o Maven é a melhor ferramenta que não permite que seus colegas de trabalho se cortem com algo pontudo.
Sled
4
Não acho que você precise ser um desenvolvedor A + para usar o Gradle. Não vejo por que uma organização que pudesse adotar o Maven não pudesse adotar o Gradle. É verdade que Gradle permite que você dê um tiro no próprio pé, da mesma forma que Ant, mas de uma maneira que Maven dificulta bastante (e eu tenho uma coleção dos pés de chute dos meus colegas para provar isso); essa é a desvantagem de tornar possível o que o Maven torna praticamente impossível.
Tom Anderson
4
Em termos de uso de algo como Gradle e de evitar pés de arremesso, proponho uma classificação de triagem de programadores. Alguns programadores não terão medo de editar os scripts de compilação e acertar as coisas mais ou menos. Essas pessoas são úteis. Alguns programadores têm medo dos scripts de construção e não os tocam. Essas pessoas pelo menos não são prejudiciais; Eu participei de uma equipe de 12 jogadores em que apenas dois de nós ousaram tocar na construção, e na verdade funcionou muito bem. Alguns programadores não têm medo dos scripts de construção, mas os estragarão se tocarem neles. Essas pessoas são perigosas.
Tom Anderson
1
então é como npm para Java
KJW
9

No documento Sonatype :

A resposta a esta pergunta depende da sua própria perspectiva. A grande maioria dos usuários do Maven vai chamar o Maven de "ferramenta de construção": uma ferramenta usada para criar artefatos implementáveis ​​a partir do código-fonte. Engenheiros de construção e gerentes de projeto podem se referir ao Maven como algo mais abrangente: uma ferramenta de gerenciamento de projetos. Qual é a diferença? Uma ferramenta de construção como o Ant se concentra apenas no pré-processamento, compilação, empacotamento, teste e distribuição. Uma ferramenta de gerenciamento de projetos como o Maven fornece um superconjunto de recursos encontrados em uma ferramenta de construção. Além de fornecer recursos de criação, o Maven também pode executar relatórios, gerar um site e facilitar a comunicação entre os membros de uma equipe de trabalho.

Eu recomendo fortemente olhar o documento do Sonatype e passar algum tempo olhando os plug-ins disponíveis para entender o poder do Maven.

Muito brevemente, ele opera em um nível conceitual mais alto do que (digamos) Ant. Com o Ant, você especifica o conjunto de arquivos e recursos que deseja criar, depois especifica como deseja que eles sejam reunidos e especifica a ordem em que deve ocorrer (limpar / compilar / jar). Com o Maven, tudo isso está implícito. O Maven espera encontrar seus arquivos em locais específicos e funcionará automaticamente com isso. Consequentemente, a configuração de um projeto com o Maven pode ser muito mais simples, mas você precisa seguir as regras do Maven!

Brian Agnew
fonte
Eu não diminuí a votação, mas talvez os votantes negativos tenham lido sua citação da propaganda da Sonatype como um endosso implícito à filosofia totalitária da "ferramenta de gerenciamento de projetos" de Maven.
21311 Tom
1
Não acho que você tenha respondido à pergunta do OP, em vez disso, você acabou de publicar o discurso de marketing ... e esse discurso é ridículo, já que o "gerenciamento de projetos" é muito mais do que o que o Maven faz serve para confundir mais do que ajuda, NA MINHA HUMILDE OPINIÃO.
Sled
2
@ Brian Desculpe, se meu comentário anterior parece inflamado, mas deixe-o reformular: Eu sinto que seu comentário só explica bem o Maven se você já entende o que é o Maven, mas como ponto de partida inicial, não é útil.
Sled
5

Mavené uma ferramenta de construção. Juntamente com Antou Gradlesão Javaferramentas para a construção.
Se você é um novato em Java, basta criar usando seu IDE, pois Mavenpossui uma curva de aprendizado acentuada.

Cratylus
fonte
O suporte do IDE para Maven no NetBeans é muito bom, tornando a curva de aprendizado quase inexistente.
Captain Giraffe