Quais são os principais benefícios do uso do maven em comparação com, digamos, formiga? Parece ser mais um aborrecimento do que uma ferramenta útil. Eu uso o maven 2, com o Eclipse Java EE simples (sem m2eclipse) e o tomcat.
Os defensores do maven acreditam que
O Maven permite que você obtenha facilmente as dependências do seu pacote
O Maven obriga a ter uma estrutura de diretórios padrão
Em minha experiência
Descobrir dependências de pacotes não é realmente tão difícil. Você raramente faz isso de qualquer maneira. Provavelmente uma vez durante a configuração do projeto e mais algumas durante as atualizações. Com o maven, você acabará corrigindo dependências incompatíveis, poms mal escritos e excluindo pacotes de qualquer maneira.
Ciclo lento FIX-COMPILE-DEPLOY-DEBUG, que mata a produtividade. Esta é a minha queixa principal. Você faz uma alteração, precisa aguardar a construção do maven e aguardar a implantação. Nenhuma implantação quente de qualquer natureza.
Ou estou apenas fazendo errado? Por favor, aponte-me para a direção certa, sou todo ouvidos.
fonte
Respostas:
Não é tão difícil ... para projetos de brinquedos. Mas os projetos em que trabalho têm muitos, realmente muitos deles, e estou muito feliz em obtê-los de forma transitória, em ter um esquema de nomeação padronizado para eles. Gerenciar tudo isso manualmente manualmente seria um pesadelo.
E sim, às vezes você precisa trabalhar na convergência de dependências. Mas pense duas vezes, isso não é inerente ao Maven, é inerente a qualquer sistema que utilize dependências (e eu estou falando sobre dependências Java em geral aqui).
Portanto, com o Ant, você deve fazer o mesmo trabalho, exceto que você deve fazer tudo manualmente: capturando alguma versão do projeto A e suas dependências, capturando alguma versão do projeto B e suas dependências, descobrindo a si mesmo quais versões exatas eles usam, verificando que eles não se sobrepõem, verificando se não são incompatíveis etc. Bem-vindo ao inferno.
Por outro lado, o Maven suporta o gerenciamento de dependências e as recupera transitivamente para mim e fornece as ferramentas necessárias para gerenciar a complexidade inerente ao gerenciamento de dependências : posso analisar uma árvore de dependências, controlar as versões usadas nas dependências transitivas, excluir alguns dos -los , se necessário, controlar a Converge através dos módulos, etc. não há mágica. Mas pelo menos você tem apoio.
E não esqueça que o gerenciamento de dependências é apenas uma pequena parte do que o Maven oferece, há muito mais (nem mesmo mencionando as outras ferramentas que se integram perfeitamente ao Maven, por exemplo, Sonar ).
Primeiro, por que você usa o Maven assim? Eu não. Uso meu IDE para escrever testes, códigos até que eles passem, refatore, implemente, implante a quente e execute uma compilação local do Maven quando terminar, antes de confirmar, para garantir que não interrompa a compilação contínua.
Segundo, não tenho certeza se o uso do Ant tornaria as coisas muito melhores. E, de acordo com a minha experiência, as compilações modulares do Maven usando dependências binárias me proporcionam um tempo de compilação mais rápido do que as compilações Ant monolíticas típicas. De qualquer forma, dê uma olhada no Maven Shell para obter um ambiente pronto para (re) usar o Maven (o que é incrível por sinal).
Então, no final, e lamento dizer, não é realmente o Maven que está matando sua produtividade, é o uso indevido de suas ferramentas. E se você não estiver feliz com isso, bem, o que posso dizer, não use. Pessoalmente, estou usando o Maven desde 2003 e nunca mais olhei para trás.
fonte
O Maven pode ser considerado uma ferramenta completa de desenvolvimento de projeto, não apenas uma ferramenta de construção como o Ant. Você deve usar o Eclipse IDE com o plugin maven para corrigir todos os seus problemas.
Aqui estão algumas vantagens do Maven, citadas na página Benefícios do uso do Maven :
fonte
Descobrir dependências para pequenos projetos não é difícil. Mas quando você começa a lidar com uma árvore de dependência com centenas de dependências, as coisas podem facilmente sair do controle. (Estou falando da experiência aqui ...)
O outro ponto é que, se você usar um IDE com compilação incremental e suporte ao Maven (como Eclipse + m2eclipse), deverá poder configurar a edição / compilação / implementação e teste a quente.
Pessoalmente, não faço isso porque passei a desconfiar desse modo de desenvolvimento devido a más experiências no passado (antes do Maven). Talvez alguém possa comentar se isso realmente funciona com o Eclipse + m2eclipse.
fonte
O Maven é uma das ferramentas em que você precisa decidir de antemão que gosta e quer usá-lo, já que você passará algum tempo aprendendo e, tendo tomado a decisão de uma vez por todas, você poderá pular todos os tipos de dúvida enquanto aprende (porque você gosta e quer usá-lo)!
As fortes convenções ajudam em muitos lugares - como Hudson, que pode fazer maravilhas nos projetos Maven -, mas pode ser difícil de ver inicialmente.
editar: A partir de 2016, o Maven é a única ferramenta de construção Java em que os três principais IDEs podem usar as fontes prontas para uso. Em outras palavras, o uso do maven torna sua compilação independente de IDE. Isso permite, por exemplo, usar o perfil do Netbeans, mesmo se você trabalha normalmente no eclipse.
fonte
Maven vantagens sobre formiga são algumas. Eu tento resumi-los aqui.
Convenção sobre configuração O
Maven usa uma abordagem distinta para o layout e a inicialização do projeto, facilitando o salto em um projeto. Geralmente, são necessários apenas o checkpoint e o comando maven para obter os artefatos do projeto.
Modularização do
projeto As convenções do projeto sugerem (ou melhor, forçam) o desenvolvedor a modularizar o projeto. Em vez de um projeto monolítico, você geralmente é forçado a dividir seu projeto em subcomponentes menores, o que facilita a depuração e o gerenciamento da estrutura geral do projeto
Gerenciamento de dependências e ciclo de vida do projeto
Em geral, com uma boa configuração do SCM e um repositório interno, o gerenciamento de dependências é bastante fácil e você é novamente forçado a pensar em termos do ciclo de vida do projeto - versões de componentes, gerenciamento de lançamento e assim por diante. Um pouco mais complexo do que a formiga alguma coisa, mas, novamente, uma melhoria na qualidade do projeto.
O que há de errado com maven?
Maven não é fácil. O ciclo de construção (o que é feito e quando) não é tão claro no POM. Além disso, surgem alguns problemas com a qualidade dos componentes e as dependências ausentes nos repositórios públicos.
A melhor abordagem (para mim) é ter um repositório interno para armazenar em cache (e manter) dependências e aplicar ao gerenciamento de liberação de componentes. Para projetos maiores que os projetos de amostra de um livro, você agradecerá ao maven antes ou depois
fonte
O Maven pode fornecer benefícios para o seu processo de construção, empregando convenções e práticas padrão para acelerar seu ciclo de desenvolvimento e, ao mesmo tempo, ajudando você a obter uma taxa mais alta de sucesso. Para uma visão mais detalhada de como o Maven pode ajudá-lo em seu processo de desenvolvimento, consulte Os benefícios do uso do Maven.
fonte
O Maven é uma poderosa ferramenta de gerenciamento de projetos baseada no POM (modelo de objeto do projeto). É usado para construção, dependência e documentação de projetos. Simplifica o processo de compilação como o ANT. Mas é muito avançado que o ANT. O Maven ajuda a gerenciar - Construções, Documentação, Relatórios, SCMs, Lançamentos, Distribuição. - maven repository é um diretório do arquivo JAR empacotado com o arquivo pom.xml. O Maven pesquisa dependências nos repositórios.
fonte
Eu nunca me deparei com o ponto 2? Você pode explicar por que você acha que isso afeta a implantação de alguma maneira. Se alguma coisa acontecer, você poderá estruturar seus projetos de uma maneira modularizada, que realmente permita correções para bugs em uma determinada camada e permita o desenvolvimento independente de uma API a partir do restante do projeto, por exemplo.
É possível que você esteja tentando compactar tudo em um único módulo; nesse caso, o problema não é realmente sério, mas da maneira como você o está usando.
fonte
Isso deveria ter sido um comentário, mas não cabia no tamanho de um comentário, então eu o publiquei como resposta.
Todos os benefícios mencionados em outras respostas são alcançáveis por meios mais simples do que usar o maven. Se, por exemplo, você é novo em um projeto, de qualquer forma, passará mais tempo criando a arquitetura do projeto, juntando componentes, codificando do que baixando jarros e copiando-os para a pasta lib. Se você tem experiência em seu domínio, já sabe como iniciar o projeto com quais bibliotecas. Não vejo nenhum benefício em usar o maven, especialmente quando ele apresenta muitos problemas ao executar automaticamente o "gerenciamento de dependências".
Eu só tenho conhecimento de nível intermediário do maven, mas digo-lhe, fiz grandes projetos (como ERPs) sem usar o maven.
fonte