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:
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
Como o Spring Boot implementa o modo de desenvolvimento de plug-in
Aprendizagem baseada em cenários, faça algoritmos chatos funcionarem
Lista de 173 empresas estatais que vale a pena ingressar na Internet
··································
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.