#maven #maven-3
Вопрос:
кто-нибудь может, пожалуйста, помочь, почему команда mvn всегда загружает файлы зависимостей в текущий каталог? Он должен храниться в M2_HOME, верно?
Я пытался
mvn package
mvn help:system
$M2_HOME был установлен правильно
C:> mvn --version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: C:UsersDocumentsbinapache-maven-3.6.3bin..
Java version: 1.8.0_252, vendor: Azul Systems, Inc., runtime: C:UsersDocumentsbinZuluzulu-8jre
Default locale: en_SG, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
Комментарии:
1. Не должно быть никакой
M2_HOME
переменной, потому что она не нужна. У вас должен быть свой исполняемый файлPATH
, которого достаточно. Только тотJAVA_HOME
должен правильно указывать на ваш JDK. Местоположение, в котором хранятся загруженные файлы (из центра), по умолчанию$HOME/.m2/repository
может быть изменено, если это действительно необходимо, с помощьюsettings.xml
параметра, в котором необходимо находиться$HOME/.m2
…
Ответ №1:
@khmarbaise, спасибо за ваш ответ. Я пытался последовать вашему совету, но проблема не исчезла.
Сначала я замечаю, что моя переменная $HOME не установлена, но $JAVA_HOME хорош
Поэтому я настроил переменную $HOME и перезапустил командную строку, но результат остался прежним — «пакет mvn» по-прежнему загружает пакеты в текущий рабочий каталог вместо репозитория $HOME/.m2/.
Во-вторых, я проверил $HOME/.m2/settings.xml файл. Видите ли вы какие-либо проблемы ниже?
<settings
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors>
<mirror>
<id>xxx-maven</id>
<mirrorOf>central</mirrorOf>
<name>xxx maven repo</name> <url>https://xxx/nexus/repository/repo/</url>
</mirror>
</mirrors>
<profiles/>
<activeProfiles/>
</settings>
Комментарии:
1. $HOME-это заполнитель для вашего домашнего каталога. Удалите запись
<localRepository/>
в своем settings.xml файл… и повторите попытку и удалите все пустые записи, кроме той, которую вы настроили для репо nexus..2. Спасибо @khmarbaise, это почти правильно. Мне каким-то образом приходится жестко кодировать localRepository. Пожалуйста, опубликуйте свой комментарий в качестве отдельного ответа, чтобы я мог отметить его как принятый ответ.
3. Зачем вам нужен локальный репозиторий «жесткого кода»? По умолчанию используется $HOME/.m2/репозиторий, который подходит более или менее постоянно… (за исключением среды CI), где она контролируется решением CI…
4. Честно говоря, я не знаю почему. Когда я удаляю локальный репозиторий, загруженные пакеты все еще находятся в текущем каталоге. @khmarbaise
5. Чем есть что-то странное в вашей настройке или в файлах pom вашего проекта…
Ответ №2:
M2_HOME обычно устанавливается в качестве переменной среды. Вы можете сделать следующее, чтобы проверить его значение.
echo $M2_HOME
Теперь, поскольку это похоже на Windows, я думаю, что правильная команда будет:
echo %M2_HOME%
Пакеты обычно доступны в разделе %M2_HOME%/repository