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

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



답변

오프라인 모드에서 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>

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


답변

이에 대한 두 가지 옵션이 있습니다.

1.) settings.xml 에서 변경 하고 첫 번째 태그에 추가하십시오.

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

2.) 오프라인 명령에 -o 태그를 사용합니다.

mvn -o clean install -DskipTests=true
mvn -o jetty:run


답변

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”를 사용하여 메타 데이터에서 다운로드 된 아티팩트를 인식합니다.


답변

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