maven 의 mirror 와 reposcory 로 딩 순서

maven 의 mirror 와 reposcory 로 딩 순서 1. maven 의 settings. xml 파일 에는 proxy, server, reposcory, mirror 의 설정 이 있어 창고 주 소 를 설정 할 때 헷 갈 리 기 쉽다.
proxy 는 서버 가 외부 네트워크 에 직접 접근 할 수 없 을 때 설정 해 야 할 프 록 시 서비스 로 자주 사용 되 지 않 습 니 다.
server 는 서버 가 사복 에 포장 하여 업로드 할 때 사복 의 인증 정 보 를 설정 합 니 다.
reposcory 는 서버 에서 jar 패 키 지 를 다운로드 하 는 창고 주소 입 니 다.
mirror 는 창고 주 소 를 대체 하 는 미 러 주소 입 니 다.
다음은 소스 코드 를 보고 reposcory 와 mirror 의 우선 순 위 를 확인 합 니 다.
2. Maven 의 원 격 창 고 를 초기 화 할 때 new Repository Session 방법 을 실행 하고 mirror, proxy, authentication 과 다른 시스템 환경 정 보 를 만 듭 니 다.
this.mavenRepositorySystem.injectMirror(request.getRemoteRepositories(), request.getMirrors()); this.mavenRepositorySystem.injectProxy(session, request.getRemoteRepositories()); this.mavenRepositorySystem.injectAuthentication(session, request.getRemoteRepositories());
3. 주입 미 러 를 injectMirror 방법 에 옮 겨 다 니 기:
public void injectMirror (List repository, List mirrors) {if (((repository! = null) & & (mirrors! = null)) {for (ArtifactRepository repository: repository) {Mirror mirror = getMirror (repository, mirrors); injectMirror (repository, mirror);}}
주: 여 기 는 reposcories 에 데이터 가 없 을 까 봐 걱정 하지 마 세 요. 이전 reposcories 초기 화 방법 에서 "central" 중앙 창 고 를 설정 하지 않 았 을 때 기본 창 고 를 추가 할 것 이 라 고 판단 하기 때 문 입 니 다.
private void injectDefaultRepositories(MavenExecutionRequest request) throws MavenExecutionRequestPopulationException { Set definedRepositories = this.repositorySystem.getRepoIds(request.getRemoteRepositories()); if (!definedRepositories.contains(“central”)) { try { request.addRemoteRepository(this.repositorySystem.createDefaultRemoteRepository(request)); } catch (Exception e) { throw new MavenExecutionRequestPopulationException(“Cannot create default remote repository.”, e); } } } public ArtifactRepository createDefaultRemoteRepository(MavenExecutionRequest request) throws Exception { return createRepository(“https://repo.maven.apache.org/maven2”, “central”, true, “daily”, false, “daily”, “warn”); }
3. 일치 하 는 미 러 는 getMirror 방법 에서:
public static Mirror getMirror(ArtifactRepository repository, List mirrors) { String repoId = repository.getId(); if ((repoId != null) && (mirrors != null)) { for (Mirror mirror : mirrors) { if ((repoId.equals(mirror.getMirrorOf())) && (matchesLayout(repository, mirror))) { return mirror; } } for (Mirror mirror : mirrors) { if ((matchPattern(reposcory, mirror. getMirror Of ())) & (matches Layout (reposcory, mirror)) {return mirror;}} return null;} 자주 사용 되 지 않 는 layot 설정 을 무시 하고 첫 번 째 순환 은 mirror Of 와 reposcoryId 가 똑 같은 mirror 를 우선 찾 습 니 다.
두 번 째 순환 은 규칙 을 통 해 mirror, matchPattern 과 일치 하 는 방법 입 니 다.
static boolean matchPattern(ArtifactRepository originalRepository, String pattern) { boolean result = false; String originalId = originalRepository.getId(); if (("".equals(pattern)) || (pattern.equals(originalId))) { result = true; } else { String[] repos = pattern.split(","); for (String repo : repos) { if ((repo.length() > 1) && (repo.startsWith("!"))) { if (repo.substring(1).equals(originalId)) { result = false; break; } } else { if (repo.equals(originalId)) { result = true; break; } if (("external:".equals(repo)) && (isExternalRepo(originalRepository))) { result = true; } else if ("".equals(repo)) { result = true; } } } } return result; }mirror Of 가 번호 라면 일치 합 니 다. 그렇지 않 으 면 쉼표 로 구 분 된 mirror Of 값 을 옮 겨 다 니 며! 번 호 를 제외 합 니 다.
mirror 를 찾 으 면 injectMirror 방법 을 실행 하고 일치 하 는 mirror 를 reposcory 에 주입 합 니 다.
private void injectMirror(ArtifactRepository repository, Mirror mirror) { if (mirror != null) { ArtifactRepository original = createArtifactRepository(repository.getId(), repository.getUrl(), repository.getLayout(), repository .getSnapshots(), repository.getReleases());
  repository.setMirroredRepositories(Collections.singletonList(original));
   
  repository.setId(mirror.getId());
  repository.setUrl(mirror.getUrl());
  if (StringUtils.isNotEmpty(mirror.getLayout())) {
    repository.setLayout(getLayout(mirror.getLayout()));
  }
}

}
4. 요약 1. mirror Of 와 reposcory Id 가 같 을 때 우선 mirror 주 소 를 사용 합 니 다.
2. mirrorOf 가 * 일 때 모든 reposcory 설정 을 덮어 씁 니 다.
3. 여러 개의 mirror 설정 이 존재 할 때 mirror Of 는 * 와 같 습 니 다.
4 、 mirror Of 만 central 로 설정 할 때 reposcory 를 설정 하지 않 아 도 됩 니 다.
나의 settings. xml 는 일반적으로 이렇게 설정 합 니 다:
X: \ 도구 \ \ maven 자원 \ repository nexus - aliyun Nexus aliyun centralhttp://maven.aliyun.com/nexus/content/groups/public nexus-mine Nexus mine * http://xx.xx.xx.xx/nexus/content/groups/public nexus - aliyun 은 아 리 운 의 미 러 를 central 중앙 창고 로 사용 합 니 다.
nexus - mine 는 사복 으로 mirror Of 는 중앙 창고 에 존재 하지 않 는 jar 가방 을 제공 합 니 다.

좋은 웹페이지 즐겨찾기