Ajuda a identificar o modo confuso que o Maven está rodando sem o M2_HOME?

2

Estou executando o Ubuntu 12.04 e sou um desenvolvedor Java que recentemente saiu da área de trabalho e começou a trabalhar em um novo laptop. Eu tenho alguns problemas de compilação e estou investigando minha instalação do Maven.

Consegui alguma ajuda para configurar meu laptop e acho confusa a configuração do Maven a seguir. Eu tenho Maven instalado (por um par eu suponho) e correndo, mas não tem M2_HOME. Eu teria pensado que seria um requisito.

A seguinte é minha saída quando eu executar mvn --version

Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.7.0_51, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: en_GB, platform encoding: UTF-8 
OS name: "linux", version: "3.5.0-23-generic", arch: "amd64", family: "unix"

Nenhuma das opções a seguir me fornece: printenv | grep "maven" , printenv | grep "mvn" , printenv | grep "M2" .

Não há nada especial em ~ / .profile ou / etc / environment relacionado ao Maven.


Você pode fornecer pistas / instruções sobre por que o mvn --version no console dá saída?

    
por Crowie 12.02.2014 / 14:43

3 respostas

1

Quando você não entende algo, você tem que investigar porque funciona da maneira que funciona ... O que você acabou de fazer. E isso é ótimo!

No caso do Maven no Linux / Ubuntu, você acha confuso os locais onde o software está instalado ... OK. Mas você tem que se acostumar ... É assim que funciona.
Talvez você esteja acostumado a instalar-se e nesse caso você tem o controle da localização da instalação e você pode até usar o M2_HOME. Eu voltarei mais tarde no M2_HOME.

Fiz as mesmas pesquisas e para mim não é nada confuso ... Mas é claro que os locais podem ser inesperados para algumas pessoas ...
Instalei o pacote maven2 para fazer as mesmas investigações ...

rudy@rudy-Inspiron-530:~$ sudo apt-get install maven2 (lot of output that was discarded)
rudy@rudy-Inspiron-530:~$ whereis mvn
mvn: /usr/bin/mvn /usr/bin/X11/mvn /usr/share/man/man1/mvn.1.gz
rudy@rudy-Inspiron-530:~$ ls -l /usr/bin/mvn
lrwxrwxrwx 1 root root 21 fév 16 08:23 /usr/bin/mvn -> /etc/alternatives/mvn
rudy@rudy-Inspiron-530:~$ ls -l /usr/bin/X11/mvn
lrwxrwxrwx 1 root root 21 fév 16 08:23 /usr/bin/X11/mvn -> /etc/alternatives/mvn
rudy@rudy-Inspiron-530:~$ ls -l /etc/alternatives/mvn
lrwxrwxrwx 1 root root 25 fév 16 08:23 /etc/alternatives/mvn -> /usr/share/maven2/bin/mvn
rudy@rudy-Inspiron-530:~$ ls -l /usr/share/maven2/bin/mvn
-rwxr-xr-x 1 root root 6331 jun 25  2013 /usr/share/maven2/bin/mvn


Existem links que são usados. Eu vejo no caminho / usr / bin / mvn e / usr / bin / X11 / mvn. Então, / usr / bin / mvn, / usr / bin / X11 / mvn e / etc / alternatives / mvn são TODOS os soft links.
Existem vários níveis e claro que pode confundir você ...

A coisa real está em / usr / share / maven2 / bin / mvn.

rudy@rudy-Inspiron-530:/usr/bin$ file /usr/share/maven2/bin/mvn
/usr/share/maven2/bin/mvn: POSIX shell script, ASCII text executable


O comando 'file' retorna com o que você tem que lidar ...
No caso de / usr / share / maven2 / bin / mvn. É um script de shell!

Você fez a suposição de que JAVA_HOME e M2_HOME e ... devem ser inicializados e é uma suposição falsa ... Essas variáveis podem ajudar você e alguns outros softwares a usar uma versão específica de softwares. Alguns softwares nem funcionam sem algumas dessas variáveis ... Mas quando você está em um terminal (e usa os pacotes) você não precisa dessas variáveis! Tudo vai funcionar sem.

    
por Rudy Vissers 16.02.2014 / 09:07
1

Primeiro, não é MAVEN_HOME , mas como está escrito no título M2_HOME ... A seguinte afirmação é verdadeira: o comando mvn está em seu caminho ... O comando mvn funcionará corretamente se você tiver recebido um diretório inicial ...

No diretório home, você encontrará um diretório .m2. Em $HOME/.m2 você encontrará o repositório maven e o arquivo settins.xml . Você não precisa de um M2_HOME (testado), mas precisa de um JAVA_HOME ...

    
por Rudy Vissers 12.02.2014 / 16:29
1

O problema semi-desapareceu / estava oculto, mas por algum acaso acabei olhando minha versão Java e alguém me instruiu a executar isso

which java 

Eu também fiz which mvn .

Seguindo alguns links daqui:

/usr/bin

Eu vejo vários links que me ajudam a ver o que está instalado na minha máquina. Se eu seguir os links em /usr/bin olhando seus alvos, acabo em uma pasta /etc/alternatives . Neste eu presumo ver quase tudo disponível para executar no meu computador através do console ou PATH. A partir daqui eu posso ver coisas sobre Maven (mvn) e Java (java e javac) e outros programas executáveis. Não tenho ideia do que é essa pasta.

A pasta que contém os executáveis está aqui:

/etc/alternatives

Então, eu vejo todos os programas com este comando:

ls -ltra /etc/alternatives | less

No final, posso ver o alvo do Maven.


Mais uma vez, tudo isso veio de uma pista sobre o uso de which quando eu tive um problema ou alguma confusão sobre minha execução Java versões :

which <insert executable name here>


Existe algo no meu PATH sobre o Maven, mas eu simplesmente não estava ciente disso . Como observei na minha pergunta acima sobre como encontrar a versão em execução do Java, o conteúdo do arquivo /etc/environment , que pode ser usado para definir variáveis de ambiente de classificação, possui uma entrada que contém o seguinte trecho:

PATH="/usr/loca...sbin:/usr/bin:/sbi...


/usr/bin Então, isso significa que / usr / bin está em meus links PATH e / usr / bin / contains, e esses links apontam para executáveis que incluem Maven, Java e assim por diante. / strong>

    
por Crowie 14.02.2014 / 13:02