답변:
오프라인 모드에서 maven을 실행할 수 있습니다 mvn -o install
. 물론 로컬 저장소에서 사용할 수없는 아티팩트는 실패합니다. Maven은 분산 리포지토리를 기반으로하지 않지만 확실히 더 원활하게 만듭니다. 이러한 이유로 많은 상점에서 중앙 저장소와 점진적으로 동기화되는 내부 미러를 사용합니다.
또한 mvn dependency:go-offline
오프라인 작업을 시작하기 전에 모든 종속성이 로컬로 설치되었는지 확인하는 데 사용할 수 있습니다.
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>
개발 시스템에서 인터넷 액세스에 문제가 있고 일부 아티팩트가 손상된 파일을 다운로드하거나 전혀 다운로드하지 않았기 때문에이 솔루션을 사용했습니다. 그 이후로 문제가 없었습니다.
Maven은 로컬 저장소의 종속성이 필요합니다. 이를 얻는 가장 쉬운 방법은 인터넷 액세스를 사용하는 것입니다 (또는 여기에 제공된 다른 솔루션을 사용하는 것이 더 어렵습니다).
따라서 일시적으로 인터넷에 액세스 할 수 있다고 가정하면 dependency : go-offline 목표 와 함께 maven-dependency-plugin 을 사용하여 오프라인으로 전환 할 준비를 할 수 있습니다 . 그러면 모든 프로젝트 종속성이 로컬 저장소에 다운로드됩니다 (물론 종속성 / 플러그인의 변경에는 새로운 인터넷 / 중앙 저장소 액세스가 필요합니다).
슬프게도
dependency:go-offline
모든 것을 캐시하지 않았기 때문에 나를 위해 일하지 않았습니다. POM 파일 및 기타 암시 적으로 종속성을 언급합니다.
해결 방법은 지정되었습니다 로컬 저장소 위치를 내 중, settings.xml
로 파일 <localRepository>...</localRepository>
이나 실행 mvn
으로 -Dmaven.repo.local=...
매개 변수입니다. 초기 프로젝트 빌드 후 필요한 모든 아티팩트를 캐시해야하며 오프라인 모드 ( mvn -o ...
) 에서 Maven 빌드를 실행하는 동안 동일한 방법으로 저장소 위치를 참조 할 수 있습니다 .
오프라인으로 전환하기 전에 오프라인으로 작업하는 동안 필요한 모든 항목이 로컬 저장소에 있는지 확인해야합니다. 작업하려는 프로젝트 / 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"를 사용하여 메타 데이터에서 다운로드 된 아티팩트를 인식합니다.
이것이 당신을 위해 작동합니까?
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와 같은 로컬 서버를 실행해야 할 수 있습니다.
(출처 : jfrog.com )
또는
Sonatype Nexus http://www.sonatype.org/nexus/ 또는 JFrog Artifactory https://www.jfrog.com/artifactory/ 와 같은 Maven 저장소 서버를 사용 하십시오 .
한 개발자가 프로젝트를 빌드 한 후 다음 개발자가 빌드하거나 Jenkins CI에 인터넷 액세스가 필요하지 않습니다.
Maven 리포지토리 서버는 Maven Central (또는 더 필요한 공용 리포지토리)에 액세스하도록 구성된 프록시를 가질 수 있으며 원격 리포지토리에서 아티팩트 목록을 암호화 할 수 있습니다.
내 경험에 따르면 -o 옵션이 제대로 작동하지 않으며 go-offline 목표가 전체 오프라인 빌드를 허용하기에 충분하지 않습니다.
내가 검증 할 수있는 솔루션에는 (오프라인) --legacy-local-repository
옵션이 아닌 maven 옵션 -o
사용과 배포 저장소 대신 로컬 저장소 사용이 포함됩니다.
또한 maven-metadata-maven2_central.xml
로컬 리포지토리의 모든 파일을 maven-metadata.xml
maven이 예상 하는 형식 으로 복사해야했습니다 .
질문에 직접 답변 : 인터넷 연결이 필요하지 않지만 LAN 또는 로컬 디스크의 저장소에 액세스 할 수 있습니다 (여기에 게시 한 다른 사람들의 힌트 사용).
프로젝트가 성숙 단계에 있지 않다면 POM이 자주 변경 될 때 저장소를 자주 업데이트해야하므로 오프라인 모드는 매우 비실용적입니다. 필요한 모든 것이있는 저장소의 사본을 얻을 수 없다면 어떻게 알 수 있습니까? 일반적으로 저장소를 처음부터 시작하면 개발 중에 (다른 저장소에 연결된 컴퓨터에서) 점진적으로 복제됩니다. repo1.maven.org 공용 저장소의 무게는 수백 기가 바이트이므로 무차별 대입도 권장하지 않습니다.
다음의 단점을 수정하기 위해 새로운 플러그인이 등장했습니다 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은 버전을 업데이트 할 때까지 아무것도 다운로드하지 않습니다.
<offline> false </offline>
<localRepository>${user.home}/.m2/repository</localRepository>
에
<offline> true <offline>
<localRepository>${user.home}/.m2/repository</localRepository>
오프라인 태그를 false에서 true로 변경하십시오.
온라인 저장소에서 다운로드합니다.