Eu gostaria de responder a algumas das reclamações feitas neste fórum:
Maven é tudo ou nada. Ou, pelo menos, pelo que pude perceber pela documentação. Você não pode usar o maven facilmente como um substituto imediato para a formiga e, gradualmente, adotar recursos mais avançados.
Isso não é verdade. A grande vantagem do Maven é usá-lo para gerenciar suas dependências de uma forma racional e se você quiser fazer isso no maven e fazer todo o resto no form, você pode. Veja como:
<?xml version="1.0" encoding="UTF-8"?>
<project name="foo" basedir="." xmlns:maven="antlib:org.apache.maven.artifact.ant" >
<maven:dependencies verbose="true" pathId="maven.classpath">
<maven:pom id="maven.pom" file="pom.xml" />
</maven:dependencies>
</project>
Agora você tem um objeto de caminho de classe chamado 'maven.classpath' que contém todas as dependências de maven definidas no arquivo pom. Tudo que você precisa é colocar o jar de tarefas do maven ant no diretório lib do seu ant.
O Maven torna seu processo de construção dependente de sua conexão de rede.
A dependência padrão e o processo de busca de plug-ins dependem de uma conexão de rede, sim, mas apenas para a construção inicial (ou se você alterar as dependências ou plug-ins em uso). Depois disso, todos os frascos são armazenados em cache localmente. E se você quiser forçar a conexão sem rede, você pode dizer ao maven para usar o modo offline.
Ele impõe uma estrutura rígida a você desde o início.
Não está claro se isso se refere ao formato do arquivo ou ao problema de 'convenção versus configuração'. Para o último, existem muitos padrões invisíveis, como a localização esperada dos arquivos e recursos de origem java, ou a compatibilidade da origem. Mas isso não é rigidez, é colocar padrões razoáveis para você, de modo que você não precise defini-los explicitamente. Todas as configurações podem ser substituídas facilmente (embora para um iniciante possa ser difícil encontrar na documentação como alterar certas coisas).
Se você está falando sobre o formato do arquivo, isso é abordado na resposta à próxima parte ...
É baseado em XML, então é tão difícil de ler quanto o ANT era.
Em primeiro lugar, não vejo como você pode reclamar que algum aspecto de algo 'não é melhor do que formiga' como uma justificativa para ter uma má reputação. Em segundo lugar, embora ainda seja XML, o formato do XML é muito mais definido. Além disso, por ser assim definido, é muito mais fácil fazer um editor de cliente compacto sensato para um POM. Já vi páginas longas e scripts de construção que pulam por todo o lugar. Qualquer editor de script de construção de formigas não tornará isso mais palatável, apenas outra longa lista de tarefas interconectadas apresentadas de uma maneira ligeiramente diferente.
Posto isto, existem algumas queixas que tenho visto aqui que têm ou tiveram alguma validade, sendo a maior delas
- Documentação pobre / ausente
- Construções reproduzíveis
- A integração do Eclipse é ruim
- Insetos
Ao que minha resposta é dupla. Em primeiro lugar, o Maven é uma ferramenta muito mais nova que o Ant ou o Make, então você deve esperar que leve algum tempo para chegar ao nível de maturidade desses aplicativos. O segundo é, bem, se você não gosta, conserte . É um projeto de código aberto e usá-lo e reclamar de algo que qualquer um pode ajudar a resolver parece bastante asinino para mim. Não gosta da documentação? Contribua com ele para torná-lo mais claro, mais completo ou mais acessível para um iniciante.
O problema de compilações reproduzíveis divide-se em dois problemas, intervalos de versão e atualizações automáticas de plug-ins do maven. Para os upates do plug-in, bem, a menos que você tenha certeza de que, ao reconstruir um projeto um ano depois, está usando exatamente o mesmo JDK e exatamente a mesma versão do Ant, bem, este é o mesmo problema com um nome diferente. Para intervalos de versão, eu recomendo trabalhar em um plugin que irá produzir um pom temporário com versões bloqueadas para todas as dependências diretas e transitivas e torná-lo parte do ciclo de vida da versão do maven. Dessa forma, seus poms de versão de lançamento são sempre descrições exatas de todas as dependências.