mvn загружает файлы пакетов в текущий каталог

#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