오프라인 개발을 위해 Maven을 어떻게 구성합니까?


117

Maven을 사용하려면 어느 시점에서 인터넷 연결이 필요합니까? 컴파일, 정리, 패키징 등을 위해 내부 Maven 플러그인을 얻는 것을 의미합니까?


인터넷에 접속할 수있는 기계가 있습니까? 서버일까요?
Marcelo

2
하지만 거기에서 개발 환경으로 물건을 가져 오는 것은 매우 지루합니다.

답변:


163

오프라인 모드에서 maven을 실행할 수 있습니다 mvn -o install. 물론 로컬 저장소에서 사용할 수없는 아티팩트는 실패합니다. Maven은 분산 리포지토리를 기반으로하지 않지만 확실히 더 원활하게 만듭니다. 이러한 이유로 많은 상점에서 중앙 저장소와 점진적으로 동기화되는 내부 미러를 사용합니다.

또한 mvn dependency:go-offline오프라인 작업을 시작하기 전에 모든 종속성이 로컬로 설치되었는지 확인하는 데 사용할 수 있습니다.


이 답변과 함께 mvn이 "핵심"플러그인 (예 : 컴파일러)과 함께 제공됨을 발견했습니다. 그래서 이것은 mvn install로 내가 필요한 것을 얻을 수 있습니다.

8
또한 "mvn dependency : go-offline"을 사용 하여 pom.xml에서 참조하는 모든 종속성이 로컬 저장소에 있는지 확인할 수 있습니다.
Thorbjørn Ravn Andersen 2014 년

10
불행히도 mvn dependency:go-offline단순히 모든 것을 잡는 것은 아닙니다 . 예를 들어 새로운 가상 머신 내에서 내 프로젝트는이 목표를 실행 한 후에도 여전히 항목을 다운로드해야합니다. 이 문제를 참조하십시오 .
phs

2
내 경험에 따르면 -o 옵션이 제대로 작동하지 않으며 go-offline 목표가 전체 오프라인 빌드를 허용하기에 충분하지 않다는 것을 알 수 있습니다. 여기에서 찾은 솔루션을 참조하십시오. stackoverflow.com/q/43661755/1767316
user1767316

-llr 플래그를 -o에 추가하면 작동합니다.
Udo

10

LAN에 인터넷 액세스가 가능한 PC가있는 경우 로컬 Maven 저장소를 설치해야합니다.

Artifactory Open Source를 추천 합니다. 이것이 우리 조직에서 사용하는 것입니다. 설정하기가 정말 쉽습니다.

Artifactory는 빌드 도구 (Maven, Ant, Ivy, Gradle 등)와 외부 세계 간의 프록시 역할을합니다.

원격 아티팩트를 캐시하여 반복해서 다운로드 할 필요가 없습니다.

내부 아티팩트에 대한 원치 않는 (때로는 보안에 민감한) 외부 요청을 차단하고 아티팩트를 배포하는 방법과 위치, 사용자를 제어합니다.

Artifactory를 설정 한 후 settings.xml개발 머신에서 Maven을 변경하기 만하면됩니다 .

<?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>

개발 시스템에서 인터넷 액세스에 문제가 있고 일부 아티팩트가 손상된 파일을 다운로드하거나 전혀 다운로드하지 않았기 때문에이 솔루션을 사용했습니다. 그 이후로 문제가 없었습니다.


LAN에 연결된 액세스 권한이있는 기기가 없습니다.

2
artifactory를 사용하면 전체 저장소를 백업 한 다음 LAN에있는 PC 중 하나에서 복원 할 수 있습니다.
Marcelo

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은 로컬 저장소의 종속성이 필요합니다. 이를 얻는 가장 쉬운 방법은 인터넷 액세스를 사용하는 것입니다 (또는 여기에 제공된 다른 솔루션을 사용하는 것이 더 어렵습니다).

따라서 일시적으로 인터넷에 액세스 할 수 있다고 가정하면 dependency : go-offline 목표 와 함께 maven-dependency-plugin 을 사용하여 오프라인으로 전환 할 준비를 할 수 있습니다 . 그러면 모든 프로젝트 종속성이 로컬 저장소에 다운로드됩니다 (물론 종속성 / 플러그인의 변경에는 새로운 인터넷 / 중앙 저장소 액세스가 필요합니다).


4

슬프게도 dependency:go-offline모든 것을 캐시하지 않았기 때문에 나를 위해 일하지 않았습니다. POM 파일 및 기타 암시 적으로 종속성을 언급합니다.

해결 방법은 지정되었습니다 로컬 저장소 위치를 내 중, settings.xml로 파일 <localRepository>...</localRepository>이나 실행 mvn으로 -Dmaven.repo.local=...매개 변수입니다. 초기 프로젝트 빌드 후 필요한 모든 아티팩트를 캐시해야하며 오프라인 모드 ( mvn -o ...) 에서 Maven 빌드를 실행하는 동안 동일한 방법으로 저장소 위치를 참조 할 수 있습니다 .


3

오프라인으로 전환하기 전에 오프라인으로 작업하는 동안 필요한 모든 항목이 로컬 저장소에 있는지 확인해야합니다. 작업하려는 프로젝트 / pom (s)에 대해 "mvn dependency : go-offline"을 실행하면이를 달성하기위한 노력이 줄어 듭니다.

그러나 dependency : go-offline은 "베어 빌드"플러그인 만 다운로드하기 때문에 일반적으로 전체 이야기는 아닙니다 ( go-offline / resolve-plugins는 모든 플러그인 종속성을 해결하지 않습니다 ). 따라서 배포 / 테스트 / 사이트 플러그인 (및 기타) 및 해당 종속성을 저장소에 다운로드하는 방법을 찾아야합니다.

또한 dependency : go-offline은 pom의 아티팩트 자체를 다운로드하지 않으므로 필요한 경우 종속성 : 복사해야합니다.

때때로-MaDa가 썼 듯이-당신은 오프라인 상태에서 무엇이 필요한지 알지 못합니다. 이것은 "충분한"저장소를 갖는 것을 매우 불가능하게 만듭니다.

어쨌든 제대로 채워진 저장소가 있으면 Maven의 settings.xml에 "<offline> true </ offline>"만 추가하면 오프라인 상태가됩니다.

오프라인 상태에서 저장소를 채우는 데 사용한 Maven 프로필 (id)을 변경하지 마십시오. Maven은 프로필 ID에 바인딩 된 "ID"를 사용하여 메타 데이터에서 다운로드 된 아티팩트를 인식합니다.


3

IntelliJ를 사용하는 경우 Preferences- > Build, Execution, Deployment- > Build Tools- > Maven으로 이동 하여 Work offline을 선택 / 선택 취소하면 됩니다 .


1
마찬가지로 - 이클립스는 창 -> 환경 설정 -> Maven을 체크 "오프라인"
스튜어트 브록

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와 같은 로컬 서버를 실행해야 할 수 있습니다.


그것은 부두, 바람둥이 등 플러그인과 같은 종속성 및 플러그인에 더 많은 것 같습니다. 나는 maven-compiler-plugin과 같은 내부 maven 플러그인에 대해 더 우려하고 있습니다

1
@predhme :이 방법은 로컬 컴퓨터에서 받는다는 저장소에 이러한 이동의 모든 때문에, 모든 플러그인에 대해 작동합니다
JoseK

2


(출처 : jfrog.com )

또는

Sonatype Nexus http://www.sonatype.org/nexus/ 또는 JFrog Artifactory https://www.jfrog.com/artifactory/ 와 같은 Maven 저장소 서버를 사용 하십시오 .

한 개발자가 프로젝트를 빌드 한 후 다음 개발자가 빌드하거나 Jenkins CI에 인터넷 액세스가 필요하지 않습니다.

Maven 리포지토리 서버는 Maven Central (또는 더 필요한 공용 리포지토리)에 액세스하도록 구성된 프록시를 가질 수 있으며 원격 리포지토리에서 아티팩트 목록을 암호화 할 수 있습니다.


1

내 경험에 따르면 -o 옵션이 제대로 작동하지 않으며 go-offline 목표가 전체 오프라인 빌드를 허용하기에 충분하지 않습니다.

내가 검증 할 수있는 솔루션에는 (오프라인) --legacy-local-repository옵션이 아닌 maven 옵션 -o사용과 배포 저장소 대신 로컬 저장소 사용이 포함됩니다.

또한 maven-metadata-maven2_central.xml로컬 리포지토리의 모든 파일을 maven-metadata.xmlmaven이 예상 하는 형식 으로 복사해야했습니다 .

여기 에서 찾은 솔루션을 참조 하십시오 .


0

질문에 직접 답변 : 인터넷 연결이 필요하지 않지만 LAN 또는 로컬 디스크의 저장소에 액세스 할 수 있습니다 (여기에 게시 한 다른 사람들의 힌트 사용).

프로젝트가 성숙 단계에 있지 않다면 POM이 자주 변경 될 때 저장소를 자주 업데이트해야하므로 오프라인 모드는 매우 비실용적입니다. 필요한 모든 것이있는 저장소의 사본을 얻을 수 없다면 어떻게 알 수 있습니까? 일반적으로 저장소를 처음부터 시작하면 개발 중에 (다른 저장소에 연결된 컴퓨터에서) 점진적으로 복제됩니다. repo1.maven.org 공용 저장소의 무게는 수백 기가 바이트이므로 무차별 대입도 권장하지 않습니다.


그것은 그러나 maven 프로젝트 (개미)가 아닙니다. 그래서 필요한 모든 라이브러리를 가지고 있지만 특히 maven 내부 라이브러리에 대해 궁금합니다. maven-plugin-compiler와 같은.

Ant에서 모든 종속성을 처리하는 경우 어쨌든 Maven 메타 데이터가 부족할 수 있으므로 Maven이이를 선택하지 않습니다. "Maven 내부 라이브러리"의 경우 다운로드하는 유일한 방법은 pom 구조를 구축하고 인터넷에 연결된 컴퓨터에서 실행하는 것입니다. "실행"이란 "mvn clean install"만이 아니라 사용할 것이라고 생각하는 모든 대상을 실행하는 것을 의미합니다.
MaDa

0

오프라인으로 작업하기 전에 준비 중입니다. mvn dependency:go-offline


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은 버전을 업데이트 할 때까지 아무것도 다운로드하지 않습니다.


-2
<offline> false </offline>

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

<offline> true <offline>

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

오프라인 태그를 false에서 true로 변경하십시오.

온라인 저장소에서 다운로드합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.