Помогите определить запутанный способ работы Maven без M2_HOME?

Я использую Ubuntu 12.04 и являюсь разработчиком Java, который недавно перешел с рабочего стола и начал работать над новым ноутбуком. У меня есть несколько проблем со сборкой, и я изучаю мою установку Maven.

Я получил некоторую помощь в настройке моего ноутбука и считаю, что следующая конфигурация Maven сбивает с толку. У меня установлен Maven (я предполагаю, что его коллега) и работает, но у меня нет M2_HOME. Я бы подумал, что это будет требованием.

Ниже приводится мой вывод, когда я запускаю 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"

Ничто из следующего не дает мне ничего: printenv | grep "maven", printenv | grep "mvn", printenv | grep "M2".

В ~ / .profile или / etc / environment нет ничего особенного, связанного с Maven.


Можете ли вы дать какие-либо подсказки / указания относительно того, почему mvn --version в консоли дает вывод?

2
задан 30 October 2014 в 18:08

3 ответа

Когда вы не понимаете что-то, вы должны выяснить, почему это работает так, как работает ... Что вы только что сделали. И это здорово!

В случае Maven в Linux / Ubuntu вы находите запутанные места, где установлено программное обеспечение ... ОК. Но вы должны привыкнуть ... Вот как это работает.
Возможно, вы привыкли устанавливать maven самостоятельно, и в этом случае у вас есть контроль над местом установки, и вы даже можете использовать M2_HOME. Я вернусь позже на M2_HOME.

Я провел те же исследования, и для меня это совсем не смущает ... Но, конечно, места могут быть неожиданными для некоторых людей ...
I установил пакет maven2 для того же расследования ...

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


Есть мягкие ссылки, которые используются. Я вижу в пути / usr / bin / mvn и / usr / bin / X11 / mvn. Тогда / usr / bin / mvn, / usr / bin / X11 / mvn и / etc / alternatives / mvn являются ВСЕМИ мягкими ссылками.
Есть несколько уровней, и, конечно, это может сбить вас с толку ...

Реальная вещь находится в / 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


Команда 'file' возвращает то, с чем вам приходится иметь дело ...
В случае / usr / share / maven2 / bin / МВН. Это скрипт оболочки!

Вы сделали предположение, что JAVA_HOME и M2_HOME и ... должны быть инициализированы, и это ложное предположение ... Эти переменные могут помочь вам и некоторым другим программным продуктам использовать определенную версию программного обеспечения. Некоторые программы даже не работают без некоторых из этих переменных ... Но когда вы находитесь в терминале (и используете пакеты), вам не нужны эти переменные! Все будет работать без.

0
ответ дан 30 October 2014 в 18:08

Во-первых, это не MAVEN_HOME, но похоже на то, что оно записано в заголовке M2_HOME ... Следующее утверждение верно: команда mvn находится на вашем пути ... Команда mvn будет работать правильно, если вам было назначено домашний каталог ...

В домашней директории вы найдете каталог .m2. В $HOME/.m2 вы найдете репозиторий maven и файл settins.xml. Вам не нужно M2_HOME (проверено), но вам нужен JAVA_HOME ...

0
ответ дан 30 October 2014 в 18:08

Проблема наполовину исчезла / была скрыта, но по какой-то причине я в итоге посмотрел на свою версию Java, и кто-то дал мне указание выполнить это

which java 

Я также сделал which mvn .

После нескольких ссылок отсюда:

/usr/bin

Я могу увидеть несколько ссылок, которые помогают мне увидеть, что установлено на моей машине. Если я перейду по ссылкам в /usr/bin и посмотрю на их цели, я попаду в папку /etc/alternatives. В этом я предполагаю, что вижу почти все доступное для выполнения на моем компьютере через консоль или PATH. Отсюда я вижу вещи о Maven (mvn) и Java (java и javac) и других исполняемых программах. Понятия не имею, что это за папка.

Здесь находится папка, содержащая исполняемые файлы:

/etc/alternatives

Итак, я просматриваю все программы с помощью этой команды:

ls -ltra /etc/alternatives | less

В конце я вижу цель Maven ,


Опять же, все это произошло из-за подсказки об использовании which, когда у меня была проблема или некоторая путаница с моими работающими версиями Java :

which <insert executable name here>



Что-то есть в моем PATH о Maven, но я просто не знал об этом , Как я отмечал в ответе на мой вопрос о поиске работающей версии Java, содержимое файла /etc/environment, которое можно использовать для установки переменных среды sort, содержит запись, содержащую следующую выдержку:

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


/usr/bin Так что, я думаю, / usr / bin находится в моем PATH и / usr / bin / содержит ссылки, и эти ссылки указывают на исполняемые файлы, которые включают Maven, Java и т. д.

0
ответ дан 30 October 2014 в 18:08

Другие вопросы по тегам:

Похожие вопросы: