我运行的是 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 会给出输出?
答案1
当你不理解某件事时,你必须研究它为什么以这种方式工作……你刚才做了什么。这很棒!
在 Linux/Ubuntu 上使用 Maven 的情况下,你会发现软件安装的位置令人困惑……好的。但你必须习惯……这就是它的工作方式。
也许你习惯自己安装 maven,在这种情况下,你可以控制安装位置,甚至可以使用 M2_HOME。我稍后会回到 M2_HOME。我
做了同样的研究,对我来说,它一点也不令人困惑……但当然,位置对某些人来说可能是意料之外的……
我已经安装了 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/mvn 的情况下。它是 shell 脚本!
你假设 JAVA_HOME 和 M2_HOME 等必须初始化,但这是一个错误的假设……这些变量可以帮助你和其他一些软件使用特定版本的软件。有些软件甚至没有这些变量就无法工作……但是当你在终端中(并且你使用这些包)时,你不需要这些变量!没有它们一切都会正常工作。
答案2
首先,它不是,MAVEN_HOME
但就像它写入标题 M2_HOME... 以下断言是正确的:mvn 命令在您的路径中...如果您被分配了一个主目录,mvn 命令将正常运行...
在主目录中,您将找到一个目录,.m2.
在其中$HOME/.m2
您将找到 Maven 存储库和文件settins.xml
。您不需要M2_HOME
(已测试) 但您需要一个 JAVA_HOME...
答案3
问题半消失/被隐藏了,但偶然间我最终查看了我的 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
(可用于设置某种环境变量)有一个条目包含以下摘录:
PATH="/usr/loca...sbin:/usr/bin:/sbi...
/usr/bin
所以,我猜测这意味着 /usr/bin 在我的 PATH 上,并且 /usr/bin/ 包含链接,这些链接指向包括 Maven、Java 等的可执行文件。