Por que Maven tem uma reputação tão ruim? [fechadas]


99

Fala-se muito na internet sobre como o Maven é ruim. Tenho usado alguns recursos do Maven há alguns anos e o benefício mais importante, a meu ver, é o gerenciamento de dependências.

A documentação do Maven é menos do que adequada, mas geralmente quando preciso realizar algo, descubro uma vez e funciona (por exemplo, quando implementei a assinatura dos jars). Não acho que o Maven seja ótimo, mas resolve alguns problemas que sem ele seria uma dor genuína.

Então, por que Maven tem uma reputação tão ruim e quais problemas com Maven posso esperar no futuro? Talvez existam alternativas muito melhores que eu não conheço? (Por exemplo, nunca olhei para Ivy em detalhes.)

NOTA: Esta não é uma tentativa de causar um argumento. É uma tentativa de limpar o FUD.


29
Nunca ouvi ninguém falar mal de Maven. Descobri que os projetos são muito mais produtivos com o Maven do que com o Ant.
Taylor Leese

2
Eu concordo com Taylor. Não usei o Maven, mas ouvi muitas pessoas falarem bem dele. Esta pergunta se parece muito com FUD.
Matthew Flaschen

27
@Taylor, @Matthew, @victor: Estou surpreso que você não tenha visto alguns dos discursos de Maven. É uma ferramenta que causa divisão. É uma verdadeira coisa de amor ou ódio. Algumas pessoas amam a inteligência do gerenciamento de dependências e acusam aqueles que não gostam de não entendê-la, e algumas pessoas apenas vêem os problemas que podem ocorrer e ocorrem com dependências distribuídas complexas e decidem que não vale a pena o incômodo.
Dan Dyer

8
A Maven não respeita o princípio do KISS. Tente fazer qualquer coisa além de mvn clean install e você terá problemas. Com a formiga você pode fazer o que quiser sem nenhuma dor.
TraderJoeChicago de

4
É apenas uma anedota, mas mudar de Maven para Ant fez com que nossos tempos de build incrementais fossem de ~ 15s para bem mais de 2 minutos. Você não encontrará muitos fãs de Maven em nosso time.
Peter Bratton

Respostas:


141

Eu pesquisei o maven cerca de seis meses atrás. Estávamos iniciando um novo projeto e não tínhamos nenhum legado para sustentar. Dito isto:

  • 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.
  • De acordo com a documentação, Maven é a felicidade transcendental que realiza todos os seus sonhos mais selvagens. Você apenas tem que meditar no manual por 10 anos antes de se tornar iluminado.
  • O Maven torna seu processo de construção dependente de sua conexão de rede.
  • O Maven tem mensagens de erro inúteis. Compare o "destino x não existe no projeto y" de ant com a "execução de tarefa inválida" do mvn: você deve especificar uma fase de ciclo de vida válida ou um objetivo no formato plugin: objetivo ou pluginGroupId: pluginArtifactId: pluginVersion: objetivo "Com ajuda, ele sugere que eu execute mvn com -e para obter mais informações, o que significa que ele imprimirá a mesma mensagem e, em seguida, um rastreamento de pilha para BuildFailureException.

Grande parte da minha antipatia pelo maven pode ser explicada pelo seguinte trecho de Better Builds with Maven:

Quando alguém quer saber o que é Maven, geralmente pergunta “O que exatamente é Maven?” E espera uma resposta curta e contundente. “Bem, é uma ferramenta de construção ou uma estrutura de script” Maven é mais do que três palavras chatas e pouco inspiradoras. É uma combinação de idéias, padrões e software, e é impossível destilar a definição de Maven a uma simples digestão. As ideias revolucionárias costumam ser difíceis de transmitir com palavras.

Minha sugestão: se você não consegue transmitir as ideias com palavras, não tente escrever um livro sobre o assunto, porque não vou absorver as ideias telepaticamente.


134
Para quem entende Maven, nenhuma explicação é necessária. Para aqueles que não o fazem, nenhuma explicação é possível.
Apocalisp

35
Um dos seus marcadores é falso. -o - modo offline, portanto, não, não torna o processo de construção dependente de sua conexão de rede.
MetroidFan2002

10
Eu concordo com o ponto de tudo ou nada. Já vi muitas pessoas perderem muito tempo tentando manter metade de seu portfólio de projetos em formigas e metade em maven. Depois de se comprometer, você tem que trabalhar para converter todas as partes de sua implantação.
sal de

14
@Apocalisp: Então, em outras palavras, as únicas pessoas que entendem o Maven são as pessoas que o escreveram?
Powerlord

5
Maven é tudo ou nada. Isso não é verdade. Você pode usar o maven para gerenciamento de dependências e nada mais, se desejar. Basta um exemplo prático de como usar as tarefas do Maven Ant para ler seu arquivo pom e gerar um classpath ANT contendo todas as suas dependências.
Jherico

109
  • Ele impõe uma estrutura rígida a você desde o início.
  • É baseado em XML, então é tão difícil de ler quanto o ANT era.
  • Seu relatório de erros é obscuro e deixa você perdido quando as coisas dão errado.
  • A documentação é pobre.
  • Torna as coisas difíceis fáceis e as coisas simples difíceis.
  • Demora muito tempo para manter um ambiente de construção Maven, o que anula o ponto de ter um sistema de construção totalmente dinâmico.
  • Demora muito para descobrir que você encontrou um bug no maven e não configurou algo errado. E os insetos existem, e em lugares surpreendentes.
  • Ele promete muito, mas trai você como um amante bonito e sedutor, mas emocionalmente frio e manipulador.

45
++ Torna as coisas difíceis fáceis e as coisas simples difíceis. É tão certo!
Martin K.

8
"Ele promete muito, mas trai você como um amante bonito e sedutor, mas emocionalmente frio e manipulador." hahahaha ... isso soa muito parecido com aquele fong mestre de "Balls of Fury"
cesar

8
Sobre o ponto 2: Ele usa elementos quase sempre, atributos quase nunca, então o XML é ainda mais difícil de ler do que o do Ant!
Carl Smotricz

4
+1 para o último marcador. Nada faz do meu dia mais do que encontrar uma analogia incrível e hilária que é tão verdadeira.
Adam

1
A documentação não é pobre, é excelente.
HDave de

96

Eu certamente reclamei e gemi sobre maven no passado. Mas agora, eu não estaria sem ele. Eu sinto que os benefícios superam em muito qualquer problema. Principalmente:

  • Estrutura de projeto padronizada.
    • Dado um novo desenvolvedor ingressando em um projeto:
      • Quando você diz que é um projeto Maven, o desenvolvedor conhece o layout do projeto e como construir e empacotar o projeto
      • Quando você diz que é um projeto Ant, o desenvolvedor terá que esperar que você explique mais ou terá que percorrer o build.xml para descobrir as coisas.
    • Claro, sempre é possível impor um padrão de toda a empresa com o Ant, mas acho que na maioria das vezes, você estará reinventando a proverbial roda.
  • Gerenciamento de dependências.
    • Não apenas com bibliotecas externas, mas também com bibliotecas / módulos internos. Certifique-se de usar um servidor proxy de repositório Maven, como Nexus ou Artifactory .
    • É possível fazer isso com Ivy . Na verdade, se tudo de que você precisa é um gerenciamento de dependência, provavelmente é melhor usar o Ivy.
  • Particularmente dentro de um projeto. Achei muito útil separar pequenos subprojetos, e maven lida bem com isso. É muito mais difícil com formigas.
  • Gerenciamento de artefato padronizado (especialmente em conjunto com nexo ou artefatos )
  • O plugin de lançamento é maravilhoso.
  • A integração do Eclipse com o NetBeans é muito boa.
  • A integração com o Hudson é excelente. Particularmente os gráficos de tendência para coisas como findbugs.
  • É um ponto menor, mas o fato de que o maven incorpora detalhes como o número da versão dentro do jar ou war (não apenas no nome do arquivo) por padrão é extremamente útil.

As desvantagens para mim são principalmente:

  • A linha de comando é bastante inútil. Para começar, isso me desencorajou muito.
  • O formato XML é muito detalhado. Posso ver por que foi feito dessa forma, mas ainda é uma dor de ler.
    • Dito isso, ele tem um XSD para edição fácil em um IDE.
  • É difícil entender no começo. Coisas como o ciclo de vida, por exemplo.

Eu realmente acredito que vale a pena gastar um pouco de tempo para conhecer o maven.


2
Não me importo particularmente com o formato XML (o Eclipse pode cuidar da maioria das partes tediosas) e as instruções de construção para grandes projetos são normalmente desagradáveis ​​e complexas de qualquer maneira. Por exemplo, você não bateu verdadeiramente sua cabeça em uma parede de tijolos até que tenha tentado fazer o GNU automake fazer algo que não gosta ...
Donal Fellows

2
O IntelliJ também tem excelente suporte Maven.
Steven Benitez

1
Oh, veja uma resposta sensata com detalhes.
Tim O'Brien,

80

Minha experiência prática em dois grandes projetos é que gastamos 1.000 - 1.500 horas para cada projeto em problemas relacionados ao maven, excluindo um esforço de 500 horas de mudança do maven 1 para o maven 2.

Desde então, devo dizer que odeio o maven. Estou ficando frustrado ao pensar nisso.

A integração do Eclipse é horrível. (Tivemos problemas intermináveis ​​com a geração de código, por exemplo, onde o eclipse saiu de sincronia com o código gerado e exigiu uma reconstrução completa, muitas vezes. A culpa é tanto maven quanto eclipse, mas eclipse é mais útil do que maven e digamos emacs, então o eclipse fica e o maven tem que ir.)

Tínhamos muitas dependências e, como descobrimos, erros de sintaxe são, na verdade, enviados para repositórios maven públicos com bastante frequência, o que pode arruinar horas do seu valioso tempo. Cada semana. A solução alternativa é ter um proxy ou repositório controlado localmente, o que também demorou um pouco para ser acertado.

A estrutura do projeto Mavens não é realmente adequada para desenvolvimento com Eclipse, e o tempo de construção em Eclipse aumenta.

Um efeito do problema de geração e sincronização de código, tivemos que reconstruir do scrach com bastante frequência, reduzindo seu ciclo de código / compilação / teste para um ciclo de compilação / websurf / sleep / die / código infinito, enviando você de volta aos anos 90 e Tempos de compilação de 40 minutos.

A única desculpa para o maven é a resolução de dependência, mas eu gostaria de fazer isso de vez em quando, não em todas as compilações.

Para resumir, o maven está tão longe do KISS quanto pode estar. E também, os defensores tendem a ser o tipo de pessoa que comemora mais no dia de seu aniversário quando sua idade é primo. Sinta-se à vontade para votar contra mim :-)


3
Eu concordo com algumas das coisas que você diz, embora eu ache que finalmente entendi direito. Para obter o que deseja, no entanto, você pode dar uma olhada no Ivy, não tentei ainda, mas parece trazer o gerenciamento de dependências em um ambiente Ant mais estruturado.
Newtopian de

5
Então, você encontrou alguma boa alternativa para o Maven?
Thilo

4
A integração do Eclipse ainda é horrível. Apesar de ter plugins atualizados, existem tarefas maven controladas por plugins que falham com mensagens de erro obscuras. Os colegas então me dizem para ir para um shell de comando e executar o mesmo comando ... então funciona misteriosamente. Eclipse é um ambiente maduro, o plugin maven está muito atrás.
Carl Smotricz de

2
Há uma diferença fundamental de como o Maven e o Eclipse definem o que é um projeto. No Maven, um projeto é mais ou menos uma forma conveniente de organizar o código-fonte. O Eclipse foi inicialmente projetado para que você pudesse trabalhar em um ou alguns projetos mais ou menos não relacionados ao mesmo tempo. Requisitos posteriores (nem sempre sólidos) levaram ao abuso da IBM de projetos como "módulos" que o Eclipse, na verdade, lida de forma bastante ruim. Para convergir as definições, em muitos casos, os projetos do maven provavelmente devem ser mapeados para pastas de origem do Eclipse. No entanto, como o maven é uma merda, por que se preocupar.
KarlP

3
Ei! Lamento o fato de que da próxima vez que eu tiver idade avançada, seja 29 anos, e a próxima idade do cubo perfeito seja 64, e minha última idade do pacto perfeito será 32 ... mas não defendo ativamente o maven.
cwallenpoole de

46

Maven é ótimo. O motivo de sua reputação tem a ver com a acentuada curva de aprendizado, na minha opinião. (que estou finalmente perto de superar)

A documentação é um pouco difícil de percorrer, simplesmente porque parece que há muito texto e coisas novas para compreender antes que comece a fazer sentido. Eu digo que tempo é tudo de que precisamos para Maven ser mais amplamente elogiado.


6
Isso pode ser verdade, mas descobri que usar a integração do Maven com o Eclipse realmente ajuda a diminuir a curva de aprendizado para as pessoas. m2eclipse.codehaus.org
Taylor Leese

2
@Taylor, tive muitos problemas com o plug-in, especialmente se você usa alguma outra versão do Eclipse ou Deus me livre RAD. Acho que está chegando lá, no entanto ...
Dan

Eu só usei com Eclipse 3.3, 3.4 e JBoss developer studio e concordo que há alguns pequenos incômodos (como o editor POM não funcionar bem), mas não tive nenhum grande problema.
Taylor Leese

10
Não é a curva de aprendizado que me incomoda. Não é tão difícil de entender. Meu problema é que para grandes projetos (comerciais), você obtém muito menos valor do que o esforço despendido. OK, seus projetos são construídos. Legal, mas o custo de um homem por ano gasto, constantes falhas de compilação devido a fatores externos, compilações de 10 minutos em vez de 5 segundos e um espaço de trabalho de eclipse feio, simplesmente não vale a pena. Além disso, pelo mesmo custo, você pode mais ou menos contratar um cara que está constantemente construindo o porta-malas manualmente.
KarlP de

8
@Karlp - bem, você não entendeu totalmente ainda ... 1.) "falhas devido a fatores externos" - você deve criar um repositório de projeto no qual você mantém todas as suas dependências e controla as versões. 2.) "Compila 10 minutos em vez de 5 segundos" - talvez para a instalação inicial do maven e primeira compilação - o maven baixa todas as dependências de que precisa, além do seu projeto - mas compilações regulares que você está fazendo para tentar construir seu próprio código não deveriam estar baixando - ver 1 - também, modo offline. 3.) "espaço de trabalho do eclipse feio" - maven funciona em todos os principais IDEs (NB, IntelliJ) e na linha de comando.
Nate

24

Porque Maven é um dispositivo para reduzir homens adultos a massas soluçando de terror absoluto.


3
Devíamos produzi-lo em massa e vendê-lo a todos os vilões com um lucro enorme!
Joachim Sauer

7
Não! O Maven não pode ser usado para fins lucrativos. Só pode ser usado para o mal.
Apocalisp

18

Prós:

  • Gerenciamento de dependências. Há vários anos, meus colegas de trabalho e eu não estamos baixando e gerenciando dependências manualmente. Esta é uma grande economia de tempo.
  • Independência de IDE. Acontece que todos os principais IDEs, Eclipse, IDEA e NetBeans têm suporte decente para projetos Maven para que nossos desenvolvedores não fiquem presos a um IDE em particular.
  • Linha de comando. Com o Maven, o suporte a configurações simultâneas de IDE e linha de comando é direto, o que é bom para integração contínua.

Contras:

  • Tem que investir no aprendizado do Maven. Bem, tem que fazer isso. Boas notícias, nem todos na equipe precisam aprender.
  • Documentação. Costumava ser um problema, agora, graças ao Sonatype e seu livro ( http://www.sonatype.com/products/maven/documentation/book-defguide ), a situação é muito melhor.
  • Rigidez. Às vezes, é desafiador e frustrante fazer as coisas da maneira que você deseja. Meu conselho seria não lutar e fazer o Maven fazer as coisas que ele faz melhor, compilações diretas ou quando houver um mojo estável disponível. Em outros casos, desistimos e fazemos coisas com tarefas Ant ( http://maven.apache.org/plugins/maven-antrun-plugin/ ) ou programas externos. Meu favorito pessoal é o plugun Groovy ( http://groovy.codehaus.org/GMaven ).

Concorrência:

  • Ant: não possui gerenciamento de dependências. Período.
  • Ivy: ainda menos madura do que Maven (não que este último também não tenha suas peculiaridades). Quase o mesmo conjunto de recursos, então não há razão convincente para mudar. Fiz várias tentativas para tentar; tudo sem sucesso.

Resumindo: todos os nossos projetos são feitos com a Maven há vários anos.


3
Ant não compete com Maven. Ivy não compete com o Maven (compete com as tarefas do Maven Ant). Maven é mais do que uma ferramenta de construção + gerenciamento de dependências. Período.
Pascal Thivent

18

Acho que tem má fama com pessoas que têm os projetos mais simples e os mais complicados.

Se você está construindo um único WAR a partir de uma única base de código, ele o força a mover a estrutura do projeto e listar manualmente os dois dos três jars no arquivo POM.

Se você estiver construindo um EAR a partir de um conjunto de nove protótipos de arquivo EAR com alguma combinação de cinco arquivos WAR, três EJBs e 17 outras ferramentas, jars de dependência e configurações que requerem ajustes de arquivos MANIFEST.MF e XML em recursos existentes durante a construção final; então o Maven provavelmente é muito restritivo. Tal projeto se torna uma confusão de perfis aninhados complicados, arquivos de propriedades e uso indevido dos objetivos de construção do Maven e da designação do Classificador.

Portanto, se você está nos últimos 10% da curva de complexidade, é um exagero. Nos 10% superiores dessa curva, você está em uma camisa de força.

O crescimento da Maven é porque funciona bem para os 80% intermediários


16

Minha experiência ecoa a frustração de muitas das postagens aqui. O problema com o Maven é que ele envolve e oculta os detalhes do gerenciamento de construção em sua busca pela bondade automagical definitiva. Isso o torna quase desamparado se quebrar.

Minha experiência é que qualquer problema com o maven rapidamente degenerou em uma caça ao snipe de várias horas por meio de redes de arquivos xml aninhados, em uma experiência semelhante ao tratamento de canal.

Eu também trabalhei em lojas que dependiam muito do Maven, as pessoas que gostaram (que gostaram pelo aspecto "aperte um botão, faça tudo pronto") não entenderam. As compilações de maven tinham um milhão de alvos automáticos, que tenho certeza que seriam úteis se eu quisesse passar horas lendo o que eles faziam. Melhores 2 alvos que funcionam que você compreende totalmente.

advertência: trabalhei pela última vez com Maven há 2 anos, pode estar melhor agora.


14

Como Glenn, não acho que Maven tenha uma reputação ruim, mas uma reputação mista. Estou trabalhando há 6 meses exclusivamente tentando migrar um projeto bastante grande para o Maven e isso mostra claramente os limites da ferramenta.

Na minha experiência, Maven é bom para:

  • gestão de dependência externa
  • gerenciamento centralizado da construção (herança de pom)
  • muitos plug-ins para muitas coisas
  • integração muito boa com ferramentas de integração contínua
  • recursos de relatórios muito bons (FindBugs, PMD, Checkstyle, Javadoc, ...)

E tem alguns problemas com:

  • abordagem tudo ou nada (difícil migrar lentamente para o Maven)
  • dependências complexe, dependências entre módulos
  • dependências cíclicas (eu sei, design ruim, mas não podemos consertar 5 anos de desenvolvimento ...)
  • coerência (os intervalos de versão não funcionam da mesma forma em todos os lugares)
  • bugs (novamente com intervalos de versão)
  • compilações reproduzíveis (a menos que você corrija o número de versões de todos os plug-ins, você não pode ter certeza de que obterá a mesma compilação em 6 meses)
  • falta de documentação (o documento é muito bom para o básico, mas não há muitos exemplos de como lidar com grandes projetos)

Para dar um contexto, existem cerca de 30 desenvolvedores trabalhando neste projeto, e o projeto já existe há mais de 5 anos, então: muito legado, muitos processos já implementados, muitas ferramentas proprietárias personalizadas já implementadas. Decidimos tentar migrar para o Maven porque o custo de manutenção de nossas ferramentas proprietárias estava ficando muito alto.


12

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.


11

Ele merece a reputação que conquistou. Nem todo mundo precisa da estrutura rígida que os desenvolvedores do Maven consideraram apropriada para cada projeto. É tão inflexível. E o que é 'Pro' para muitas pessoas, o gerenciamento de dependências, é IMHO seu maior 'contra'. Não me sinto absolutamente confortável em baixar os jars da rede e perder o sono por causa de incompatibilidades (sim, o modo offline existe, mas então por que deveria ter todas aquelas centenas de arquivos xml e somas de verificação). Eu decido quais bibliotecas uso e muitos projetos têm sérias preocupações sobre compilações que dependem da conexão de rede.

Pior ainda, quando as coisas não funcionam, você está absolutamente perdido. A documentação é uma merda, a comunidade não tem noção.


4
Eu concordo com isto. Acho que o valor do gerenciamento de dependências é exagerado. Claro que é legal quando tudo funciona, mas introduz vários pontos de falha em potencial (para não mencionar brechas de segurança em potencial). Você pode configurar seu próprio servidor de repositório para atenuar os problemas um pouco e bloquear os números de versão para evitar atualizações inesperadas, mas ainda prefiro apenas adicionar as dependências ao controle de versão, uma vez que não mudam com tanta frequência e garante uma compilação repetível .
Dan Dyer

8

Um ano depois, queria atualizar isso: não tenho mais essa opinião sobre a comunidade Maven. Eu não escreveria esta resposta se a pergunta fosse feita hoje. Vou adicionar minha opinião atual como uma resposta separada.


Esta é uma resposta muito subjetiva, mas a questão é sobre opiniões, então ...

Gosto do Maven, e gosto mais quanto mais o conheço. Uma coisa afetando meus sentimentos sobre isso, entretanto: a comunidade maven é amplamente centrada em torno da Sonatype ("a empresa maven", é onde muitos dos chefões da Maven estão trabalhando), e a Sonatype está empurrando seus produtos corporativos de forma bastante agressiva para a comunidade.

Um exemplo: o fluxo do Twitter "Maven Book" vincula a uma suposta introdução ao gerenciamento de repositórios .

Desculpe, mas essa "introdução" é metade informação, metade argumento de venda para o Nexus. Questionário: há algum outro gerenciador de repo além do Nexus e do Nexus Pro? Além disso, o que isso tem a ver com o livro Maven supostamente de código aberto? Ah, certo, o capítulo sobre gerenciamento de repositório foi dividido em um livro separado ... sobre Nexus. Hã. Se eu contribuir com o livro Maven, recebo uma taxa de referência se causar um aumento nas vendas do Nexus?

Imagine se você estivesse participando de um fórum de desenvolvimento Java e estivesse claro que os funcionários da Sun discutindo Java aproveitariam todas as oportunidades possíveis para falar sobre o NetBeans e o "NetBeans Pro". Depois de um tempo, ele perde um pouco de seu sentimento de comunidade. Nunca tive uma experiência assim com o Ant.

Tendo dito tudo isso, eu acho que o Maven é um sistema muito interessante e útil (não estou chamando-o de uma ferramenta, como o Ant é, o Maven é mais amplo do que isso) para configuração de desenvolvimento de software e gerenciamento de build. O gerenciamento de dependências é uma bênção e uma maldição às vezes, mas é revigorante - e certamente não é a única vantagem que o Maven oferece. Provavelmente estou reagindo um pouco fortemente ao xelim Sonatype, mas isso fere Maven por associação, na minha opinião. Não sei se essa opinião é compartilhada por mais alguém.


2
Zac, você sabe que gostaria de saber se você gostaria de saber mais sobre o Nexus Professional. :-)
Tim O'Brien

7

Acho que o Maven tem uma má reputação porque impõe estrutura ao seu projeto, enquanto outras ferramentas, como o Ant, permitem que você defina completamente a estrutura da maneira que desejar. Concordo também que a documentação é ruim, mas acho que principalmente a má reputação que o Maven recebe é porque as pessoas estão muito acostumadas com o Ant.


2
Eu concordo que inicialmente as pessoas podem perder o controle que tinham com o Ant, mas assim que um projeto aceitar as convenções que o Maven impõe, elas realmente verão um ganho de produtividade com ele.
Taylor Leese

5
Não é verdade, o Maven permite alterar a estrutura do projeto, apenas sugere uma estrutura amplamente utilizada.
adrian.tarau

3
Eu não acho que isso seja verdade. A maioria das reclamações sobre o Maven é sobre as maneiras pelas quais ele pode falhar, sua lentidão ou a documentação. Nunca vi ninguém reclamando da estrutura.
Dan Dyer

@Dan Dyer: Eu concordo. A estrutura é, na verdade, uma das poucas coisas boas que o Maven faz. É tudo o mais que torna Maven tão horrível.
Carl Smotricz

6

Muita magia.


3
Seja mais específico - o que há de tão mágico nisso que não está documentado?
Whaley,

4
É mágico assim que você tem que pesquisar na web durante 2 horas para descobrir porque algo não funciona como esperado. Se você quiser um exemplo específico: por que meu plugin não é executado? Você tem 2 horas.
Damien B,

Na verdade, sempre que estou fazendo algo que não envolva pesquisar na web por 2 horas, começo a suspeitar que estou usando a ferramenta errada para o trabalho ou que entendi / subestimei gravemente os requisitos.
Doug Moscrop

6

Porque as pessoas insatisfeitas reclamam, enquanto as satisfeitas não dizem que estão satisfeitas. Meu ponto é que há muito mais usuários maven satisfeitos do que insatisfeitos, mas os últimos fazem mais barulho. Este é um padrão comum da vida real também (ISP, operadora de telefonia, transportes, etc, etc).


5

O problema mais importante para mim é que o Maven, quando não configurado corretamente, pode não produzir compilações repetíveis devido a:

  • repositórios remotos não confiáveis;
  • dependências em plug-ins e bibliotecas com versões SNAPSHOT ou nenhuma versão.

Compare isso com uma construção de formigas que - embora prolixo e cansativo IMO - funciona já que todos os jars são verificados localmente.

A parte boa é que os problemas são solucionáveis:

  • use seu próprio repositório maven, que se tornou extremamente simples, estou usando o Archiva com bons resultados;
  • sempre crie versões adequadas de suas dependências. O Maven começou a bloquear as versões do plug-in no super-POM começando com 2.0.8 ou 2.0.9 e todas as suas dependências devem estar nas versões lançadas.

+1 para vincular a uma implementação de repositório alternativo.
Donal Fellows de

5

ótima ideia - má implementação.

Mudei um projeto do Ant para o Maven recentemente. Funcionou bem no final, mas tive que usar duas versões diferentes de maven-assembly-plugin e maven-jar-plugin no mesmo pom (consegui dois perfis) porque o que funcionava em uma versão estava quebrado em outra.

Então foi uma grande dor de cabeça. A documentação nem sempre é boa, mas devo admitir que foi relativamente fácil pesquisar as respostas no Google.

certifique-se de sempre especificar as versões dos plugings que você usa. Não espere que a nova versão seja compatível com versões anteriores.

Acho que a polêmica vem do fato de que o maven ainda evolui e o processo às vezes é doloroso.

Saudações

v.


Concordo que a ideia é melhor do que a execução. Não é uma tarefa pequena que escolheram em sua defesa, mas regularmente me pergunto se as coisas não poderiam ter sido feitas de uma maneira mais direta.
Eelco,

5

Eu gosto de maven. Eu usei desde pré 1.0. É uma ferramenta poderosa que, no geral, me economizou uma quantidade considerável de tempo e melhorou minha infraestrutura de desenvolvimento. Mas posso entender a frustração de algumas pessoas. Vejo 3 tipos de frustração:

  1. onde as causas são preocupações reais (por exemplo, POMs detalhados, falta de documentação),
  2. algumas são informações incorretas (por exemplo, "você precisa ter uma conexão com a Internet para construir" - não é verdade - não, isso pode ser evitado),
  3. parte disso é descarregado no maven, mas na verdade outra pessoa é culpada ("não atire no mensageiro").

Para o primeiro caso, problemas reais - bem, claro, existem problemas, os POMs são prolixos, a documentação poderia ser melhor. Apesar disso, é possível obter bons resultados com o maven em um tempo rápido. Eu me encolho toda vez que consigo construir um projeto com o Ant e tento importar isso para o meu IDE. A configuração da estrutura de diretórios pode demorar muito. com o maven, basta abrir o arquivo POM no IDE.

Para o segundo caso, Maven é complexo e mal-entendidos são comuns. Se o maven 3 puder encontrar uma maneira de lidar com essa complexidade (ou mesmo complexidade percebida), isso seria bom. maven exige um investimento considerável, mas, em minha experiência, o investimento se paga rapidamente.

Para o último ponto, acho que a reclamação sobre as dependências transitivas do maven é provavelmente o exemplo mais conhecido.

Dependências transitivas são a natureza do software real que utiliza a reutilização. DLLs do Windows, pacotes Debian, pacotes java, pacotes OSGi, até mesmo o arquivo de cabeçalho C ++ inclui todos têm dependências e sofrem o problema de dependência. Se você tem duas dependências e cada uma usa uma versão diferente da mesma coisa, você deve tentar resolver isso de alguma forma. O Maven não tenta resolver o problema de dependência, mas sim o traz para a frente e fornece ferramentas para ajudar a gerenciar o problema, como relatar conflitos e fornecer dependências consistentes para uma hierarquia de projetos e, de fato, fornece controle absoluto sobre dependências de um projeto.

A abordagem de incluir manualmente dependências com cada projeto (um autor diz que verifica todas as dependências no controle de origem) corre o risco de usar a dependência errada, como atualizações negligenciadas quando uma biblioteca é atualizada sem verificar as atualizações para suas dependências. Para um projeto de qualquer tamanho, o gerenciamento manual de dependências certamente causará erros. Com o maven, você pode atualizar a versão da biblioteca que usa e as dependências corretas são incluídas. Para gerenciamento de mudanças, você pode comparar o antigo conjunto de dependências (para o seu projeto como um todo) com o novo conjunto, e quaisquer mudanças podem ser cuidadosamente examinadas, testadas etc.

O Maven não é a causa do problema de dependência, mas o torna mais visível. Ao lidar com os problemas de dependência, o maven torna qualquer "ajuste" de dependência explícito (uma mudança em seu POM substituindo a dependência), ao invés de implícito, como é o caso com jars gerenciados manualmente no controle de versão, onde os jars estão simplesmente presentes, sem nada para suporte tempo eles são a dependência correta ou não.


5

Eu acredito que Maven tem uma má reputação porque a maioria dos detratores não observou a combinação de Maven + Hudson + Sonar . Se tivessem, eles estariam perguntando "como faço para começar"?


1 por mencionar o Sonar.
Donal Fellows de

1
Eu vi isso. Ainda não há razão para usar o Maven. Hudson e Sonar não precisam de maven.
rk2010

5

Algumas das minhas chateações com Maven:

  • A definição XML é super desajeitada e prolixa. Eles nunca ouviram falar de atributos?

  • Em sua configuração padrão, ele sempre vasculha a rede em cada operação. Independentemente de ser útil para alguma coisa, parece extremamente bobo precisar de acesso à Internet para "limpar".

  • Novamente no padrão, se eu não tiver o cuidado de especificar os números exatos da versão, ele puxará as atualizações mais recentes da rede, independentemente de essas versões mais novas introduzirem erros de dependência. Em outras palavras, você é colocado à mercê do gerenciamento de dependência de outras pessoas.

  • A solução para todo esse acesso à rede é desligá-lo adicionando a -oopção. Mas você deve se lembrar de desligá-lo se realmente quiser fazer a atualização das dependências!

  • Outra solução é instalar seu próprio servidor de "controle de origem" para dependências. Surpresa: a maioria dos projetos já tem controle de origem, só que funciona sem configuração adicional!

  • As compilações do Maven são incrivelmente lentas. Mexer com atualizações de rede alivia isso, mas as compilações do Maven ainda são lentas. E terrivelmente prolixo.

  • O plugin Maven (M2Eclipse) se integra muito mal com o Eclipse. O Eclipse se integra razoavelmente bem com o software de controle de versão e com o Ant. A integração do Maven é muito desajeitada e feia em comparação. Eu mencionei lento?

  • Maven continua com erros. As mensagens de erro são inúteis. Muitos desenvolvedores estão sofrendo com isso.


2
Eu nunca fiz o Maven extrair a última versão de uma dependência, a menos que eu estivesse usando uma dependência SNAPSHOT ou adicionasse um novo recurso que exigisse algo. Se eu solicitar a versão 1.2.3 e tiver a 1.2.3 em meu repositório local, não recebo a 1.2.3 novamente.
Mike Cornell

1
Você controla suas dependências diretas, sim. Quem controla as dependências de suas dependências?
Carl Smotricz

Para o seu primeiro ponto, sobre atributos, que deve ser abordado no próximo, (por muito tempo agora eu vou admitir) Maven 3.
mezmo

@mezmo: Isso seria muito bem-vindo. Obrigado pela informação!
Carl Smotricz

4

Boa pergunta. Acabei de começar um grande projeto no trabalho e parte dos projetos anteriores foi para introduzir modularidade em nossa base de código.

Já ouvi coisas ruins sobre o maven. Na verdade, é tudo o que já ouvi sobre isso. Eu olhei como apresentá-lo para resolver o pesadelo de dependência que estamos enfrentando. O problema que vi com o Maven é que ele é bastante rígido em sua estrutura, ou seja, você precisa se adequar ao layout do projeto para que funcione para você.

Eu sei o que a maioria das pessoas vai dizer - você não precisa se conformar com a estrutura. De fato, isso é verdade, mas você não saberá disso até que tenha ultrapassado a curva de aprendizado inicial, momento em que investiu muito tempo para jogar tudo fora.

Ant é muito usado hoje em dia, e eu adoro isso. Levando isso em consideração, me deparei com um gerenciador de dependências pouco conhecido chamado Apache Ivy . Ivy se integra muito bem ao Ant e é rápido e fácil obter a configuração e o funcionamento da recuperação básica do JAR. Outro benefício do Ivy é que ele é muito poderoso, mas bastante transparente; você pode transferir compilações usando mecanismos como scp ou ssh com bastante facilidade; recuperação de dependência 'encadeada' sobre sistemas de arquivos ou repositórios remotos (compatibilidade com repositório Maven é um de seus recursos populares).

Dito isso, achei muito frustrante usar no final - a documentação é abundante, mas está escrita em um inglês ruim, o que pode aumentar a frustração ao depurar ou tentar descobrir o que deu errado.

Vou revisitar o Apache Ivy em algum momento durante este projeto e espero fazê-lo funcionar corretamente. Uma coisa que ele fez foi nos permitir, como uma equipe, descobrir de quais bibliotecas dependemos e obter uma lista documentada.

Em última análise, acho que tudo se resume a como você trabalha como indivíduo / equipe e o que você precisa para resolver seus problemas de dependência.

Você pode achar úteis os seguintes recursos relacionados ao Ivy:


1
Ivy não compete com Maven (talvez com Maven Ant Tasks, mas não com Maven).
Pascal Thivent

1
O Ivy não compete com o Maven Ant Tasks, ele compete com o gerenciamento de dependência do Maven.
Damien B,

@atc Isso foi certo !! : "Eu sei o que a maioria das pessoas dirá - você não precisa se conformar com a estrutura. Na verdade, isso é verdade, mas você não saberá disso até que tenha ultrapassado a curva de aprendizado inicial, ponto em que investiu muito tempo ir jogar tudo fora. "
rk2010

4

Eu amo o Maven - ele aumenta a produtividade e estou muito feliz por não estar mais usando o Ant (ufa!)

Mas se eu pudesse mudar as coisas, seria:

  1. Faço pom.xml arquivo menos prolixo
  2. Facilite a inclusão de .jars que não sejam do repositório.

1
Acho que os usuários do Maven seriam mais bem atendidos se os IDEs permitissem a importação de jars ausentes ou de terceiros para os repositórios locais. Quão difícil seria ter uma caixa de diálogo "pick the jar click import"?
sal de

@sal Meu palpite é que a Maven não quer promover uma prática que quebre a portabilidade.
Pascal Thivent

1
Eu considero o fato de que é difícil adicionar potes de lugares aleatórios um ponto forte. Se você estiver em um ambiente de equipe e precisar usar um jar estranho, deverá implantá-lo no repositório maven de sua equipe. Dessa forma, o resto da equipe e seus servidores de CI estarão executando a mesma construção. Todo mundo executa a mesma construção é a base da filosofia maven.
tunaranch de

1 para o jarro. Trazer seus próprios frascos pré-construídos em uma construção (por qualquer motivo) é uma dor desnecessária.
Thorbjørn Ravn Andersen

@tunaranch pessoalmente, gosto que as coisas estejam no Maven Central ou (jars e tudo) no que está sendo verificado no controle de versão. Basicamente, eu quero ser capaz de trazer meu repositório git em um drive USB, dar uma olhada, executar "mvn clean install" e ir almoçar e estar pronto e funcionando.
Thorbjørn Ravn Andersen

4

Existem muitas razões pelas quais as pessoas não gostam de Maven, mas vamos admitir que são muito subjetivas . O Maven hoje com alguns livros bons (e gratuitos), documentação melhor, conjunto maior de plug-ins e muitos builds de projetos de sucesso de referência não é o mesmo Maven de um ou dois anos atrás.

Usar o Maven em projetos simples é muito fácil, com os maiores / complicados é necessário mais conhecimento e compreensão mais profunda da filosofia Maven - talvez em nível de empresa uma posição para guru Maven como administrador de rede. A principal fonte de declarações de ódio do Maven geralmente é a ignorância .

Outro problema para o Maven é a falta de flexibilidade como, por exemplo, no Ant. Mas lembre-se de que Maven tem um conjunto de convenções - aderir a elas parece ser difícil no início, mas no final muitas vezes evita problemas.

O sucesso atual do Maven prova seu valor. Claro que ninguém é perfeito e Maven tem alguns contras e suas peculiaridades, mas na minha opinião Maven lentamente balança seus oponentes.


@Pascal. No caso de problemas com o Maven, há um stackoverflow e você aqui :)
cetnar

3

Eu não diria que tem uma má reputação, mas sim uma má reputação. Se o seu projeto seguir o paradigma da "convenção sobre a configuração" defendido pelo Maven, você poderá obter muita vantagem com ele. Se o seu projeto não se encaixa bem na visão de mundo do Maven, ele pode se tornar um fardo.

Para isso, se você tiver controle sobre o projeto, o Maven pode ser o caminho a percorrer. Mas se você não fizer isso e o layout for determinado por alguém que não é fã de Maven, pode ser mais problemático do que vale a pena. Os projetos Maven mais felizes são provavelmente aqueles que começaram como projetos Maven.


“Eu não diria que tem uma má reputação, mas sim uma mista” - eu diria que provavelmente é mais preciso, apenas opiniões negativas tendem a se destacar mais.
Dan

Concordo que portar um projeto para o maven aumenta a dificuldade experimentalmente em relação ao tamanho do projeto (projeto maior para importar = importação mais difícil). usar o maven para iniciar um projeto é a melhor abordagem para usar o maven. Caso contrário, pode não valer a pena o esforço.
Luigimax

3

Para mim, existem tantos prós quanto contras em usar maven versus formiga para projetos internos. Para projetos de código aberto, entretanto, acho que o Maven teve um grande impacto em tornar muitos projetos muito mais fáceis de construir. Não faz muito tempo que levava horas para compilar o projeto OSS Java médio (baseado em formigas), tendo que definir uma tonelada de variáveis, baixar projetos dependentes, etc.

Você pode fazer qualquer coisa com o Maven que você pode fazer com o Ant, mas onde o Ant não encoraja nenhum padrão, o Maven sugere fortemente que você siga sua estrutura, ou será mais trabalhoso. É verdade que algumas coisas são difíceis de configurar com o Maven e que seriam fáceis de fazer com o Ant, mas o resultado final é quase sempre algo mais fácil de construir da perspectiva de pessoas que querem apenas verificar um projeto e pronto.


3

Se você vai apostar seu negócio ou trabalho em um projeto de desenvolvimento, você quer estar no controle das fundações - ou seja, o sistema de construção. Com Maven, você não está no controle. É declarativo e opaco. Os desenvolvedores do maven-framework não têm ideia de como construir um sistema transparente ou intuitivo e isso fica claro na saída do log e na documentação.

O gerenciamento de dependências é muito tentador, pois pode incomodar você em algum momento no início do projeto, mas esteja avisado, está fundamentalmente quebrado e acabará lhe causando muitas dores de cabeça. Quando duas dependências têm dependências temporárias incompatíveis, você será bloqueado por um ninho de ratos de complexidade que interromperá a compilação de toda a equipe e bloqueará o desenvolvimento por dias. O processo de construção com Maven também é notoriamente inconsistente para diferentes desenvolvedores em sua equipe devido aos estados inconsistentes de seus repositórios locais. Dependendo de quando um desenvolvedor criou seu ambiente ou em quais outros projetos está trabalhando, eles terão resultados diferentes. Você descobrirá que está excluindo todo o seu repositório local e fazendo com que o Maven baixe novamente os jars com muito mais frequência do que na primeira vez que foi configurado para um branch de desenvolvimento. Eu acredito que o OSGI é uma iniciativa que está tentando resolver esse problema fundamental. Eu diria que talvez se algo precisa ser tão complexo, a premissa fundamental esteja errada.

Eu sou um usuário / vítima maven há mais de 5 anos e tenho que dizer que você vai economizar muito mais tempo para apenas verificar suas dependências em seu repositório de origem e escrever tarefas simples e agradáveis. Com o ant, você sabe EXATAMENTE o que seu sistema de compilação está fazendo.

Já experimentei muitos, muitos homens perdidos de tempo em várias empresas diferentes devido a problemas com o Maven.

Recentemente, tentei trazer um antigo projeto GWT / Maven / Eclipse de volta à vida e 2 semanas de todo o meu tempo livre depois, ainda não consigo construí-lo de maneira consistente. É hora de cortar minhas perdas e desenvolver usando formiga / eclipse que eu penso ...


3

A resposta curta: achei muito difícil manter um sistema de compilação Maven e gostaria de mudar para o Gradle assim que possível.

Trabalho com Maven há mais de quatro anos. Eu me consideraria um especialista em sistemas de construção porque nas últimas (pelo menos) cinco empresas em que estive, fiz grandes reformas na infraestrutura de construção / implantação.

Algumas das lições que aprendi:

  • A maioria dos desenvolvedores tende a não perder muito tempo pensando em sistemas de construção; como resultado, a construção se transforma em uma bagunça espaguete de hacks, mas eles apreciam quando essa bagunça é limpa e racionalizada.
  • Ao lidar com a complexidade, prefiro ter um sistema transparente que expõe a complexidade (como o Ant) do que um que tenta tornar as coisas complexas simples impondo restrições rígidas, como o Maven. Pense em Linux vs. Windows.
  • O Maven tem muitos buracos na funcionalidade que requerem soluções alternativas bizantinas. Isso leva a arquivos POM incompreensíveis e impossíveis de manter.
  • Ant é super flexível e compreensível, mas os arquivos Ant podem ficar bem grandes também, porque é de baixo nível.
  • Para qualquer projeto significativo, os desenvolvedores devem criar sua própria estrutura de construção / implantação além do que a ferramenta oferece; a adequação da estrutura ao projeto tem muito a ver com a facilidade de manutenção. As melhores ferramentas irão apoiá-lo na criação de uma estrutura e não lutar com você.

Analisei o Gradle um pouco e parece que ele tem o potencial de ser o melhor dos dois mundos, permitindo uma mistura de descrição de construção declarativa e procedural.


3

É mais complicado do que a linguagem que você usou para escrever seu projeto. Configurá-lo corretamente é mais difícil do que programar.


3

Eu lutei para superar a maioria / todos os negativos mencionados aqui e objeções semelhantes de colegas de equipe, e concordo com todos eles. Mas eu persisti e continuarei a fazê-lo, mantendo firme o único objetivo que apenas o maven (ou gradle, talvez) realmente atinge.

Se você está otimizando para colegas ( desenvolvedores de código aberto ), ant / make / tudo o que servirá. Se você estiver entregando funcionalidade a não pares ( usuários ), apenas maven / gradle / etc servirá.

Apenas o maven permite que você libere um pequeno pacote de código-fonte + poms (sem lib / binário embutido de dependência jars com nomes enigmáticos e nenhuma informação de dependência) com um layout de projeto padrão bem documentado que pode ser carregado por qualquer IDE por alguém que não tenha absorvido as convenções de layout idiossincráticas dos desenvolvedores. E há um procedimento de instalação de um botão (instalação mvn) que constrói tudo enquanto adquire quaisquer dependências ausentes.

O resultado é um acesso fácil que esses usuários podem seguir para encontrar o caminho até o código, onde os poms podem apontar a documentação relevante.

Tirando esse requisito (indispensável), não gosto de maven tanto quanto qualquer pessoa.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.