Як налаштувати Maven для розробки офлайн?


117

Чи потрібен Maven у певний момент підключення до Інтернету, щоб мати можливість ним користуватися? Що означає конкретно отримання внутрішніх плагінів Maven для збирання, чищення, упаковки тощо?


У вас є машина з доступом до Інтернету? Можливо, сервер?
Марсело

2
Ми це робимо, але повернути речі звідти в середовище розвитку - це досить нудно.

Відповіді:


163

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

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


Незгоджуючись з цією відповіддю, я виявив, що mvn поставляється зі своїми "core" плагінами (тобто компілятором). Так що при встановленні mvn я можу отримати те, що мені потрібно.

8
Також врахуйте, що ви можете використовувати "mvn залежність: відключити офлайн", щоб забезпечити наявність усіх залежностей, згаданих у вашому pom.xml, у вашому локальному сховищі.
Thorbjørn Ravn Andersen

10
На жаль, mvn dependency:go-offlineпросто не все ловить. Наприклад, всередині свіжої віртуальної машини, наприклад, мій проект все ще повинен завантажувати речі навіть після виконання цієї мети. Дивіться також це питання .
phs

2
Мій досвід показує , що опція -o не працює належним чином і що йти мета форуму далеко не достатньо , щоб забезпечити повну автономну збірку: Дивіться рішення , яке я знайшов тут: stackoverflow.com/q/43661755/1767316
user1767316

Якщо ви додасте прапор -llr додатково до -o, він повинен працювати.
Удо

10

Якщо у вас є ПК з доступом до Інтернету у вашій локальній мережі, вам слід встановити локальний сховище Maven.

Я рекомендую Artifactory Open Source . Це те, що ми використовуємо в нашій організації, це дуже просто налаштувати.

Артифактор виступає проксі-сервером між вашим інструментом збирання (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>

Ми використовували це рішення, оскільки у нас були проблеми з доступом до Інтернету в наших розробних машинах, а деякі артефакти завантажували пошкоджені файли або взагалі не завантажували. З тих пір у нас проблем не було.


Немає машини з доступом, яка підключена до локальної мережі.

2
За допомогою артефактури ви можете створити резервну копію всього свого сховища, а потім відновити його на одному з ПК, який знаходиться в локальній мережі.
Марсело

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-залежність з його залежністю: мета go-offline . Це завантажить усі ваші проектні залежності у ваше місцеве сховище (звичайно, зміни залежностей / плагінів потребуватимуть нового доступу до Інтернет / центрального сховища).


4

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

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


3

Перед тим, як перейти в режим офлайн, ви повинні переконатися, що все знаходиться у вашій місцевій репортажі, що потрібно під час роботи в офлайні. Запуск "mvn залежності: відключення офлайн" для проектів (-ів) / пом (-ів), над якими ви плануєте працювати, зменшить зусилля для досягнення цього.

Але зазвичай це не вся історія, тому що залежність: офлайн завантажуватиме лише плагіни "голої збірки" ( go-offline / resolution-плагіни не вирішують усіх залежностей плагіна ). Тож вам доведеться знайти спосіб завантаження плагінів для розгортання / тестування / сайту (а може бути й інших) та їх залежностей у ваше репо.

Крім того, залежність: відключений офлайн не завантажує сам артефакт пам’яті, тому вам доведеться залежність: скопіюйте його, якщо потрібно.

Іноді - як писала MaDa - ви не знаєте, що вам знадобиться, перебуваючи в автономному режимі, що робить неможливим наявність "достатнього" репо.

У будь-якому випадку з належним чином заповненим репо, вам потрібно лише додати "<offline> true </offline>" до налаштувань Maven.xml, щоб вийти в офлайн.

Не змінюйте профіль (ідентифікатор) Maven, який ви використовували для заповнення репо, під час перебування в режимі офлайн. Maven розпізнає завантажені артефакти у своїх метаданих із "ідентичністю", яка прив'язана до ідентифікатора профілю.


3

Якщо ви використовуєте IntelliJ, ви можете просто піти в Preferences -> Будівельні, виконання, розгортання -> Будівельні інструменти -> Maven і чек / зніміть прапорець Робота в автономному режимі .


1
Аналогічно - Eclipse is 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>

Якщо ні, вам може знадобитися запустити локальний сервер, наприклад, апаш, на ваших машинах.


Здається, це більше для залежностей та плагінів, таких як плагіни 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.

Дивіться рішення, яке я знайшов тут .


0

Відповідаючи безпосередньо на ваше запитання: він не потребує підключення до Інтернету, а доступу до сховища в локальній мережі або на локальному диску (використовуйте підказки інших людей, які розмістили тут).

Якщо ваш проект не знаходиться в зрілій фазі, це означає, що POM міняються досить часто, режим офлайн буде дуже недоцільним, оскільки вам доведеться також досить часто оновлювати сховище. Якщо ви не можете отримати копію сховища, у якому є все необхідне, але як би ви це знали? Зазвичай ви запускаєте сховище з нуля, і воно поступово клонується під час розробки (на комп'ютері, підключеному до іншого сховища). Копія загальнодоступного сховища repo1.maven.org важить сотні гігабайт, тому я також не рекомендую грубу силу.


Це, але не як проект Maven (мурашник). Отже, у мене є всі мої гібриди, але мені цікаво спеціально про внутрішні губи Maven. Такі як maven-plugin-компілятор.

Якщо у вас всі залежності обробляються Ant, вам, мабуть, не вистачає метаданих Maven, так що Maven їх не підбирає. Що стосується "Maven Internal libs", єдиний спосіб завантажити їх - це створити свою структуру пом і запустити її на комп'ютері, підключеному до Інтернету. Під "запуском" я маю на увазі виконання кожної цілі, яку, на вашу думку, будете використовувати, не обов'язково лише "mvn clean install".
MaDa

0

Під час підготовки до роботи в режимі офлайн просто запустіть mvn dependency:go-offline


0

З'явився новий плагін для усунення недоліків mvn dependency:go-offline:

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

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


-2
<offline> false </offline>

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

до

<offline> true <offline>

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

Змініть офлайн-тег з хибного на справжній.

завантажуватиметься з репо онлайн

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.