Разница между вызовом maven непосредственно в оболочке и вызовом его из intellij IDEA

Редактировать 3: я также пытался установить прокси-сервер maven с помощью параметров java, упомянутых в этой теме.


Изменить 2: я уверен, что идея intellij использует тот же файл settings.xml, тот же двоичный файл maven и тот же локальный репозиторий, что и системный maven.


Редактировать 1: я пытался проверить журнал сборки каждой рабочей нагрузки, основное отличие заключается в том, как вызывать maven в самом начале журнала сборки.

Для идеи intellij это выглядит следующим образом:

C:\Program Files\Java\jdk1.8.0_101\bin\java.exe" -Dmaven.multiModuleProjectDirectory=C:\Users\eugene\IdeaProjects\alluxio -Dmaven.home=C:\apache-maven-3.5.4-bin\apache-maven-3.5.4 -Dclassworlds.conf=C:\apache-maven-3.5.4-bin\apache-maven-3.5.4\bin\m2.conf "-Dmaven.ext.class.path=C:\Program Files\JetBrains\IntelliJ IDEA\plugins\maven\lib\maven-event-listener.jar" -Dfile.encoding=UTF-8 -classpath C:\apache-maven-3.5.4-bin\apache-maven-3.5.4\boot\plexus-classworlds-2.5.2.jar org.codehaus.classworlds.Launcher -Didea.version2019.2.4 -DskipTests=true -T 2C clean install -DskipTests -Dmaven.javadoc.skip -Dfindbugs.skip -Dcheckstyle.skip -Dlicense.skip

Для системной оболочки maven только что запустился без этой вызывающей информации.


Я использую maven для создания проекта Alluxio из исходного кода.

Я пробовал как Windows 10, так и Ubuntu и обнаружил ту же проблему при использовании идеи Intellij, позвольте мне уточнить ее в деталях.

  • ОС: Windows 10/Ubuntu 18.04
  • Мейвен: 3.5.4
  • Команда сборки: mvn -T 2C clean install -DskipTests -Dmaven.javadoc.skip -Dfindbugs.skip -Dcheckstyle.skip -Dlicense.skip

Alluxio может быть успешно построен с использованием maven 3.5.4 напрямую, но с несколькими ошибками при использовании идеи intellij. Что меня смущает, так это то, что я настроил идею intellij для использования системы maven 3.5.4 и использовал точно такую ​​​​же команду сборки. Почему ошибки произошли здесь, а не в системной оболочке.

Ошибка, которую я встретил, выглядит так:

Failure to find com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava in https://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced

А также нравится:

sourceFile C:\Users\eugene\IdeaProjects\alluxio\table\server\underdb\target\alluxio-table-server-underdb-2.2.0-SNAPSHOT-jar-with-dependencies.jar does not exist

Метод, используемый для запуска сборки maven из идеи intellij:

  • Щелкните значок maven в правом верхнем углу.
  • Нажмите Execute Maven Goal
  • Введите mvn -T 2C clean install -DskipTests -Dmaven.javadoc.skip -Dfindbugs.skip -Dcheckstyle.skip -Dlicense.skip и введите, чтобы запустить сборку

Настройки maven в intellij idea установлены по умолчанию, за исключением изменения двоичного файла maven со встроенного двоичного файла на системный maven 3.5.4.

Заранее благодарны за Вашу помощь.


person Eugene    schedule 01.01.2020    source источник
comment
При выполнении цели в IntelliJ взгляните на консоль и проверьте, какая на самом деле выполняется команда, чем она отличается от той, которую вы выполняете непосредственно в оболочке?   -  person lealceldeiro    schedule 01.01.2020
comment
Я настоятельно рекомендую сначала протестировать: удалите все из локального репозитория и попробуйте собрать через mvn clean package, а не mvn clean install, и проверьте, работает ли это без проблем...   -  person khmarbaise    schedule 01.01.2020
comment
@lealceldeiro Спасибо за этот комментарий. Я обновил разницу в вопросе.   -  person Eugene    schedule 01.01.2020
comment
@khmarbaise Для быстрого теста я безуспешно попробовал mvn clean package. Для медленного теста (удалить все из локального репозитория) я сделаю это ночью и обновлю результат, как только он будет завершен. В любом случае, насколько я понимаю, install содержит шаг package и имеет дополнительный шаг, чтобы сделать встроенную цель доступной в локальном репозитории maven. Я попробовал install цель с пустым репозиторием, и я думаю, что медленный тест также не пройдет.   -  person Eugene    schedule 01.01.2020
comment
Если в сборке есть что-то, для чего требуется install, это показатель того, что сборка в целом неверна...отсутствуют межмодульные зависимости, что является проблемой...помимо этого: почему тесты должны завершаться неудачно, если установка не была выполнена ?   -  person khmarbaise    schedule 01.01.2020
comment
@khmarbaise Я хочу сказать, что я пробовал install с пустым репозиторием, и это не удалось. Основываясь на приведенном выше факте, я предполагаю, что «пакет» из пустого репозитория также не удастся. Во всяком случае, я попробую это позже.   -  person Eugene    schedule 01.01.2020
comment
@khmarbaise Я не совсем понимаю вашу точку зрения. Если в сборке есть что-то, что требует установки, это показатель того, что сборка в целом неверна.   -  person Eugene    schedule 01.01.2020
comment
Если вам нужно запустить сборку с mvn clean install и она работает, но только с mvn clean package нет проблем в сборке... что я написал, например, об отсутствующих зависимостях между модулями и т. д. В частности, если вы хотите ускорить работу с помощью mvn -T 2C .....   -  person khmarbaise    schedule 01.01.2020
comment
@khmarbaise Я попытался очистить весь локальный репозиторий maven и попробовал «mvn clean package», но получил ту же ошибку. В качестве обходного пути я буду использовать идею Intellij для редактирования кода и использовать системную оболочку для его сборки maven. Спасибо за ваше время в любом случае.   -  person Eugene    schedule 02.01.2020


Ответы (1)


Я видел две проблемы, которые выдают сообщение об ошибке, как вы видите, и это не имеет ничего общего с IntelliJ.

Первый возникает, когда Maven не удается успешно загрузить артефакт из репозитория (например, прерывание сети). Он пометит артефакт как неудачный и откажется от повторной попытки, пока не истечет некоторое время. Очистка локального кеша Maven или удаление папки этого артефакта решит эту проблему.

Второй возникает, когда две отдельные сборки Maven пытаются загрузить один и тот же артефакт из разных репозиториев. Много лет назад у Maven были проблемы с людьми, которые создавали модифицированные версии проектов с открытым исходным кодом (например, Apache Commons) и публиковали их в общедоступном репозитории. Я не помню подробностей, но это вызвало много проблем. Maven теперь записывает репозиторий, используемый для извлечения артефакта. Когда два проекта Maven используют разные репозитории, второй созданный проект завершится ошибкой, поскольку репозиторий не совпадает. У меня это произошло, когда я переключился на частный репозиторий Artifactory, и еще не все мои проекты были перенесены.

Поскольку вы пытаетесь создать один и тот же проект с помощью двух инструментов, ваша проблема выглядит как вариант второй проблемы. Я подозреваю, что IntelliJ использует файл settings.xml, отличный от того, что у вас есть в командной строке, и что IntelliJ использует другие репозитории. Репозитории можно указать в файле settings.xml, а также в POM проекта.

Попробуйте сначала удалить локальный кеш и собрать из IntelliJ. Если это удается, а затем происходит сбой сборки оболочки, это ваша проблема.


Обновление: см. этот ответ для получения более подробной информации о том, почему Maven начал отслеживать репозиторий, но обратите внимание, что файл отслеживания теперь называется _remote.repositories.

https://stackoverflow.com/a/16870552/252344

person Faron    schedule 01.01.2020
comment
Спасибо за ваш ответ и позвольте мне ответить, что вы упомянули. Во-первых, я также думаю, что это может быть проблема с сетью, я попытался удалить связанную папку с артефактами из локального репозитория, и ошибка все еще была там. А во-вторых, я уверен, что идея intellij использует тот же файл settings.xml, тот же двоичный файл maven и тот же локальный репозиторий. - person Eugene; 01.01.2020