Я использую 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 в консоли дает вывод?
Когда вы не понимаете что-то, вы должны выяснить, почему это работает так, как работает ... Что вы только что сделали. И это здорово!
В случае 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 и ... должны быть инициализированы, и это ложное предположение ... Эти переменные могут помочь вам и некоторым другим программным продуктам использовать определенную версию программного обеспечения. Некоторые программы даже не работают без некоторых из этих переменных ... Но когда вы находитесь в терминале (и используете пакеты), вам не нужны эти переменные! Все будет работать без.
Во-первых, это не MAVEN_HOME
, но похоже на то, что оно записано в заголовке M2_HOME ... Следующее утверждение верно: команда mvn находится на вашем пути ... Команда mvn будет работать правильно, если вам было назначено домашний каталог ...
В домашней директории вы найдете каталог .m2.
В $HOME/.m2
вы найдете репозиторий maven и файл settins.xml
. Вам не нужно M2_HOME
(проверено), но вам нужен JAVA_HOME ...
Проблема наполовину исчезла / была скрыта, но по какой-то причине я в итоге посмотрел на свою версию 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 и т. д.