Как настроить Maven для автономной разработки?

117

Требуется ли в какой-то момент maven подключение к Интернету, чтобы использовать его? Имеется в виду, что специально получить внутренние плагины maven для компиляции, очистки, упаковки и т. Д.?


источник
У вас есть машина с доступом в Интернет? Может сервер?
Марсело
2
Мы делаем, но переносить вещи оттуда в среду разработки - утомительное занятие.

Ответы:

163

Вы можете запустить maven в автономном режиме mvn -o install. Конечно, любые артефакты, недоступные в вашем локальном репозитории, не сработают. Maven не основан на распределенных репозиториях, но они, безусловно, упрощают работу. По этой причине многие магазины используют внутренние зеркала, которые постепенно синхронизируются с центральными репозиториями.

Кроме того, с mvn dependency:go-offlineего помощью можно убедиться, что все ваши зависимости установлены локально, прежде чем вы начнете работать в автономном режиме.

nsfyn55
источник
В связи с этим ответом я обнаружил, что mvn поставляется со своими «основными» плагинами (т. Е. Компилятором). Итак, с помощью mvn install я могу получить то, что мне нужно.
8
Также подумайте, что вы можете использовать «mvn dependency: go-offline», чтобы гарантировать, что все зависимости, указанные в вашем pom.xml, присутствуют в вашем локальном репозитории.
Торбьёрн Равн Андерсен
10
К сожалению mvn dependency:go-offlineпросто все не улавливает. Например, внутри новой виртуальной машины мой проект все еще должен загружать что-то даже после выполнения этой цели. См. Также этот выпуск .
фс
2
Мой опыт показывает, что параметр -o не работает должным образом и что цель перехода в автономный режим далеко не достаточна для обеспечения полной автономной сборки: см. Решение, которое я нашел здесь: stackoverflow.com/q/43661755/1767316
user1767316
Если вы добавите флаг -llr дополнительно к -o, он должен работать.
Удо
10

Если у вас есть компьютер с доступом в Интернет в вашей локальной сети, вам следует установить локальный репозиторий Maven.

Я рекомендую Artifactory с открытым исходным кодом . Это то, что мы используем в нашей организации, его действительно легко настроить.

Artifactory действует как посредник между вашим инструментом сборки (Maven, Ant, Ivy, Gradle и т. Д.) И внешним миром.

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

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

После настройки Artifactory вам просто нужно изменить Maven settings.xmlна машинах разработки:

<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <mirrors>
    <mirror>
      <mirrorOf>*</mirrorOf>
      <name>repo</name>
      <url>http://maven.yourorganization.com:8081/artifactory/repo</url>
      <id>repo</id>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>libs-release</name>
          <url>http://maven.yourorganization.com:8081/artifactory/libs-release</url>
        </repository>
        <repository>
          <snapshots />
          <id>snapshots</id>
          <name>libs-snapshot</name>
          <url>http://maven.yourorganization.com:8081/artifactory/libs-snapshot</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>plugins-release</name>
          <url>http://maven.yourorganization.com:8081/artifactory/plugins-release</url>
        </pluginRepository>
        <pluginRepository>
          <snapshots />
          <id>snapshots</id>
          <name>plugins-snapshot</name>
          <url>http://maven.yourorganization.com:8081/artifactory/plugins-snapshot</url>
        </pluginRepository>
      </pluginRepositories>
      <id>artifactory</id>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>artifactory</activeProfile>
  </activeProfiles>
</settings>

Мы использовали это решение, потому что у нас были проблемы с доступом в Интернет на наших машинах для разработки, и некоторые артефакты загружали поврежденные файлы или не загружались вообще. С тех пор у нас не было проблем.

Marcelo
источник
Нет машины с доступом, подключенной к локальной сети.
2
С помощью artifactory вы можете сделать резервную копию всего репозитория, а затем восстановить его на одном из компьютеров в локальной сети.
Марсело
7

Для этого есть два варианта:

1.) внести изменения в settings.xml, добавить это в первый тег

<localRepository>C:/Users/admin/.m2/repository</localRepository>

2.) используйте тег -o для автономной команды.

mvn -o clean install -DskipTests=true
mvn -o jetty:run
Джиоти Пракаш
источник
6

Maven нужны зависимости в вашем локальном репозитории. Самый простой способ получить их - использовать доступ в Интернет (или сложнее использовать другие решения, представленные здесь).

Предполагая, что вы можете получить временный доступ в Интернет, вы можете подготовиться к отключению с помощью maven-dependency-plugin с его целью dependency: go-offline . Это загрузит все зависимости вашего проекта в ваш локальный репозиторий (конечно, для изменения зависимостей / плагинов потребуется новый доступ к Интернету / центральному репозиторию).

FrVaBe
источник
4

К сожалению dependency:go-offline, у меня не сработало, так как не все кэшировалось, т.е. Файлы POM и другие неявно упоминают зависимости.

Обходной путь был указать локальное расположение хранилища , либо в settings.xmlфайл с <localRepository>...</localRepository>или запустив mvnс -Dmaven.repo.local=...параметром. После первоначальной сборки проекта все необходимые артефакты должны быть кэшированы, а затем вы можете ссылаться на местоположение репозитория такими же способами при запуске сборки Maven в автономном режиме ( mvn -o ...).

luka5z
источник
3

Перед тем, как перейти в автономный режим, вы должны убедиться, что все находится в вашем локальном репо, что требуется при работе в автономном режиме. Запуск "mvn dependency: go-offline" для проекта (ов) / pom (ов), над которым вы собираетесь работать, уменьшит усилия для достижения этой цели.

Но обычно это еще не все, потому что dependency: go-offline будет загружать только плагины «голой сборки» ( go-offline / resolve-plugins не разрешает все зависимости плагинов ). Поэтому вам нужно найти способ загрузить плагины развертывания / тестирования / сайта (и, возможно, другие) и их зависимости в свое репо.

Более того, dependency: go-offline не загружает сам артефакт pom, поэтому вы должны использовать зависимость: скопируйте его, если требуется.

Иногда - как писал MaDa - вы не знаете, что вам понадобится, находясь в автономном режиме, что делает практически невозможным наличие «достаточного» репо.

В любом случае, имея правильно заполненное репо, вам нужно только добавить «<offline> true </offline>» в Maven settings.xml, чтобы перейти в автономный режим.

Не меняйте профиль Maven (id), который вы использовали для заполнения репо, находясь в автономном режиме. Maven распознает загруженные артефакты в своих метаданных по «идентификатору», который привязан к идентификатору профиля.

Эйке Пёгель
источник
3

Если вы используете IntelliJ, вы можете просто перейти в « Настройки» -> « Сборка, выполнение, развертывание» -> « Инструменты сборки» -> Maven и установить / снять флажок « Работать в автономном режиме» .

heez
источник
1
Аналогично - Eclipse - это Window -> Preferences -> Maven и отметьте «Offline»
Stuart Brock
2

Это работает для вас?

http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html

Не забудьте добавить его в репозиторий плагинов и указать URL-адрес, где бы ни находился ваш репозиторий.

<repositories>
    <repository>
        <id>local</id>
        <url>file://D:\mavenrepo</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>local</id>
        <url>file://D:\mavenrepo</url>
    </pluginRepository>
</pluginRepositories>

В противном случае вам может потребоваться запустить локальный сервер, например apache, на ваших машинах.

gigadot
источник
Кажется, это больше для зависимостей и плагинов, таких как плагины jetty, tomcat и т. Д. Меня больше беспокоят внутренние плагины maven, такие как maven-compiler-plugin
1
@predhme: этот подход будет работать для всех плагинов, поскольку все они попадают в репозиторий maven на вашем локальном компьютере
JoseK
2


(источник: jfrog.com )

или

Просто используйте серверы репозитория Maven, такие как Sonatype Nexus http://www.sonatype.org/nexus/ или JFrog Artifactory https://www.jfrog.com/artifactory/ .

После того, как один разработчик построит проект, для его сборки следующими разработчиками или Jenkins CI не потребуется доступ в Интернет.

Сервер репозитория Maven также может иметь прокси, настроенные для доступа к Maven Central (или другим необходимым общедоступным репозиториям), и у них может быть синхронизированный список артефактов в удаленных репозиториях.

Пол Верест
источник
1

Мой опыт показывает, что опция -o не работает должным образом и что цель перехода в автономный режим далеко не достаточна для обеспечения полной автономной сборки:

Решение, которое я мог проверить, включает использование --legacy-local-repositoryопции maven, а не -o(автономной), и использование локального репозитория вместо репозитория распространения.

Кроме того, мне пришлось скопировать все maven-metadata-maven2_central.xmlфайлы локального репо в maven-metadata.xmlформу, ожидаемую maven.

См. Решение, которое я нашел здесь .

user1767316
источник
0

Отвечая на ваш вопрос напрямую: для этого не требуется подключение к Интернету, но требуется доступ к репозиторию в локальной сети или на локальном диске (используйте подсказки от других людей, которые разместили здесь).

Если ваш проект не находится на стадии зрелости, это означает, что когда POM меняются довольно часто, автономный режим будет очень непрактичным, так как вам также придется довольно часто обновлять свой репозиторий. Если только вы не можете получить копию репозитория, в котором есть все, что вам нужно, но откуда вы знаете? Обычно вы запускаете репозиторий с нуля, и он постепенно клонируется во время разработки (на компьютере, подключенном к другому репозиторию). Копия публичного репозитория repo1.maven.org весит сотни гигабайт, поэтому я бы также не рекомендовал использовать грубую силу.

Мада
источник
Это так, но не как проект maven (муравей). Итак, у меня есть все необходимые библиотеки, но мне было интересно узнать о внутренних библиотеках maven. Например, maven-plugin-compiler.
Если у вас есть все зависимости, обрабатываемые Ant, вам, вероятно, и так не хватает метаданных Maven, поэтому Maven их не получит. Что касается «внутренних библиотек Maven», единственный способ загрузить их - создать структуру pom и запустить ее на компьютере, подключенном к Интернету. Под «запускать» я подразумеваю выполнение каждой цели, которую, по вашему мнению, вы будете использовать, не обязательно только «mvn clean install».
MaDa
0

В процессе подготовки перед работой в автономном режиме просто запустите mvn dependency:go-offline

msangel
источник
0

Появился новый плагин для исправления недостатков mvn dependency:go-offline:

https://github.com/qaware/go-offline-maven-plugin

Добавьте его в свой pom, затем бегите mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies. После того, как вы настроите все динамические зависимости, maven больше не будет пытаться загружать что-либо (пока вы не обновите версии).

Jiehong
источник
-2
<offline> false </offline>

<localRepository>${user.home}/.m2/repository</localRepository>

в

<offline> true <offline>

<localRepository>${user.home}/.m2/repository</localRepository>

Измените автономный тег с false на true.

скачаю из репо онлайн

Дханарадж К
источник