Anúncio oficial do Maven: Livre-se do Maven e do Gradle, uma nova geração de ferramentas de construção mais fortes, rápidas e poderosas está chegando!

e3e8085972d31bf1587443d05c02f550.png

Fonte: https://blog.csdn.net/weixin_48321993/article/details/125979820

Eu acredito que como um desenvolvedor Java, você já teve o suficiente da compilação lenta do maven, mas devido a cargas históricas, hábitos de uso e outros problemas, você não pode mudar para outras ferramentas de compilação mais rápidas por enquanto. Aqui vou apresentá-lo para um maven mais rápido—— maven-mvnd.

1. Introdução

O maven-mvnd é uma ferramenta de compilação mais rápida derivada da equipe Apache Maven depois de emprestar Gradle e Takari. O Mvnd incorpora o Maven e é por esse motivo que podemos alternar perfeitamente o Maven para o mvnd (não é necessário instalar o Maven separadamente).

Em termos de design, um ou mais processos daemon são gerados no mvnd para atender às solicitações de compilação para obter o efeito de compilações paralelas. Além disso, na escolha da VM, o mvnd usa o GraalVM para substituir o JVM tradicional.Comparado a ele, o GraalVM inicia mais rápido e ocupa menos memória.

De acordo com a documentação, o mvnd tem as seguintes vantagens sobre o Maven tradicional:

  • A JVM executando a construção não precisa ser reiniciada para cada construção.

  • O carregador de classe para as classes de plug-in Maven é armazenado em cache em várias compilações, os jars de plug-in são lidos e analisados ​​apenas uma vez.

  • O código nativo gerado pelo JIT na JVM é preservado. A compilação JIT leva menos tempo em comparação com o Maven. Durante compilações repetidas, o código otimizado para JIT fica imediatamente disponível. Isso se aplica não apenas ao código dos plug-ins Maven e Maven Core, mas também a todo o código do próprio JDK.

Por padrão, o mvnd constrói módulos em paralelo usando vários núcleos de CPU. O número de núcleos usados ​​é dado pela fórmula Math.max(Runtime.getRuntime().availableProcessors() - 1, 1). Se sua árvore de origem não suportar compilações paralelas, passe -T1 na linha de comando para tornar suas compilações seriais.

Ao mesmo tempo, o funcionário deu um diagrama dinâmico de execução em uma máquina de 24 núcleos:

9ed267a4b3bb495d91287ff4233959a4.gif

2. Instalação

Para a instalação do mvnd, o documento oficial dá um tutorial bem detalhado, recomenda-se ler primeiro: https://github.com/apache/maven-mvnd

O autor instalou por meio do Homebrew e a prática provou que não há problemas com a instalação e uso do macOS m1. No entanto, deve-se notar que a versão mvnd instalada desta forma é 0.7.1, e após testes no ubuntu e macOS m1, verifica-se que esta versão não suporta JDK8 (talvez seja apenas um problema com o computador do autor) , mas, conforme mostrado no exemplo oficial, o JDK11 realmente não é problema. A execução do comando mvnd no JDK8 produz o seguinte erro:

~ % mvnd -v
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/mvndaemon/mvnd/client/DefaultClient has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:757)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:352)

Estima-se que o arquivo executável baixado dessa forma seja compilado por uma versão superior do JDK e não possa ser executado em uma versão inferior porque carece de alguns métodos ou recursos. Quando eu estava perdido, o autor encontrou Problemas fechados: Diferentes versões do java para mvnd e maven #512 nas instruções de atualização da versão mais recente do maven-mvnd. O autor forneceu uma solução para esse problema é definir a versão especificada por JAVA_HOME Defina como JDK11 e adicione o parâmetro -Dmaven.compiler.release=8 ao executar o comando mvnd, ou seja

mvnd -Dmaven.compiler.release=8 compile

Desta forma, o código compilado correspondente ao JDK8 pode ser gerado.

Para o problema #512, o autor respondeu que a versão mínima suportada do mvnd é JDK8, mas o autor começou a tentar a partir da 0.5.2 e ainda relatou o mesmo erro... Talvez haja um certo problema com o computador do autor, porque eu vi outras pessoas postando O gráfico de resultados mostra que a versão mais recente sob JDK8 também pode ser instalada e usada. Além disso, se ainda não funcionar, talvez possamos gerar um arquivo executável compilando manualmente o código-fonte.As etapas específicas foram fornecidas no leia-me oficial.

3. Use

O uso é exatamente igual ao do Maven, apenas troque o comando mvn por mvnd.

Na medição real da máquina do autor, comparada com o Maven tradicional, o tempo gasto na construção através do mvnd é 1/2 do original.

Quatro. Resumo

O autor deste artigo parte da introdução, instalação, uso e algumas situações anormais do maven-mvnd.Se os leitores quiserem saber mais detalhes, podem ler os documentos oficiais.

E talvez o Maven aprimorado ainda não seja tão bom quanto o Gradle, mas esse aprimoramento do Maven ainda é muito perfumado sob o pano de fundo da carga histórica e dos hábitos de uso.

------

Criamos um grupo de intercâmbio técnico de alta qualidade. Quando você está com pessoas excelentes, você também se torna excelente. Apresse-se e clique para entrar no grupo e desfrutar da alegria de crescer juntos. Além disso, se você quiser mudar de emprego recentemente, passei 2 semanas por ano coletando uma onda de experiência cara a cara em grandes fábricas. Se você planeja mudar de emprego após o festival, pode clicar aqui para reivindicá- lo !

Leitura recomendada

··································

Olá, sou DD, um programador, desenvolvo um driver veterano há 10 anos, MVP da Alibaba Cloud, TVP da Tencent Cloud. Do desenvolvimento geral ao arquiteto e ao parceiro. Ao longo do caminho, meu sentimento mais profundo é que devemos continuar aprendendo e prestar atenção à fronteira. Contanto que você possa perseverar, pensar mais, reclamar menos e trabalhar duro, será fácil ultrapassar nas curvas! Portanto, não me pergunte se é tarde demais para fazer o que faço agora. Se você é otimista em relação a algo, deve perseverar para ver a esperança, não perseverar apenas quando vê a esperança. Acredite em mim, contanto que você se atenha a isso, você será melhor do que agora! Se você ainda não tem uma direção, pode me seguir primeiro, e muitas vezes compartilharei algumas informações de ponta aqui para ajudá-lo a acumular capital para curvas e ultrapassagens.

Acho que você gosta

Origin blog.csdn.net/j3T9Z7H/article/details/131297605
Recomendado
Clasificación