Maven 창고는 무엇입니까?
예를 들어, Maven을 사용하지 않을 때 과거에는 ANT와 함께 프로젝트를 구축하는 데 사용했을 때 종종 /lib라는 하위 디렉토리가 표시되는데,이 서브 디렉토리는 Log4J.jar, junit.jar 등과 같은 다양한 타사 종속성 JAR 파일을 저장합니다.
프로젝트를 구축 할 때마다 이러한 /lib 디렉토리를 작성한 다음 한 쌍의 JAR 파일을 복사해야합니다. 이는 명백한 복제입니다. 반복은 항상 악몽의 출발점입니다. 여러 프로젝트는 동일한 JAR 파일을 공유하지 않으므로 디스크 자원 폐기물을 유발할뿐만 아니라 버전의 일관성 관리를 어렵게 만듭니다.
또한 SVN과 같은 버전 관리 도구를 사용하는 경우 (버전 관리 도구를 사용하지 않습니까? 지금 SVN을 시도해보십시오. 많은 두통을 해결하는 데 도움이 될 수 있습니다) 많은 JAR 파일을 코드 라이브러리에 제출해야하지만 버전 관리 도구는 이진 파일을 처리하는 데 적합하지 않습니다.
Maven 저장소는 모든 JAR 파일 (전쟁, 지퍼, POM 등)이 배치되는 곳입니다. 모든 Maven 프로젝트는 동일한 Maven 저장소에서 필요한 종속성 JAR을 얻을 수있어 디스크 리소스를 절약 할 수 있습니다. 또한 Maven 저장소의 모든 항아리에는 고유 한 좌표가 있기 때문에 Maven 그룹 ID, 구성 요소 ID, 버전, 포장 방법 등을 알려 주므로 Maven 프로젝트는 종속성 버전 관리를 쉽게 수행 할 수 있습니다. JAR 파일을 SCM 저장소에 제출할 필요는 없으며 모든 구성원이 사용할 수있는 조직 수준 Maven 저장소를 만들 수 있습니다.
요컨대, Maven 저장소는 아티팩트 (주로 항아리)를 관리하는 데 도움이됩니다.
Maven에서는 종속성, 플러그인 또는 프로젝트 구성의 출력을 구성 요소라고 할 수 있습니다.
Maven은 모든 프로젝트의 모든 공유 구성 요소를 통합 위치에 저장합니다. 이 통합 위치를 창고라고합니다. (창고는 종속성과 플러그인이 저장되는 곳입니다)
모든 구성 요소에는 고유 한 좌표가 있습니다. Maven 은이 좌표를 기반으로 창고에서 구성 요소의 고유 한 스토리지 경로를 정의합니다.
저장소에서 Maven의 스토리지 경로 해석 :
1. GroupId를 기반으로 경로를 준비하고주기 분리기를 경로 분리기로 변환합니다. 즉, "변환". 에게 "/" ; 예 : org.testng ---> org/testng
2. 인공물을 기준으로 경로를 준비하고 arg/testng/testng에 인공물을 연결합니다.
3. 버전을 사용하여 경로를 준비하고 뒷면에 버전을 연결하십시오 : org/testng/testng/5.8
4. 뒷면에 분리기 하이픈을 사용하여 ArtifactID를 버전에 연결하십시오 : org/testng/testng/5.8/tesng-5.8
5. 구성 요소에 분류기가있는 경우 항목 4 후 분리기 하이픈을 추가하고 분류기, org/testng/testng/5.8/tesng-5.8-jdk5를 추가하십시오.
6. 구성 요소의 확장을 확인하십시오. 확장이 존재하는 경우 기간 분리기와 확장을 추가하십시오. 확장은 포장, org/testng/testng/5.8/tesng-5.8-jdk5.jar에 의해 결정됩니다
이 시점에서 우리는 Maven의 구성 요소 스토리지의 세부 사항을 이해합니다.
Maven 창고 분류 :
Maven 's Warehouse에는 두 가지 범주가 있습니다. 1. Local Warehouse 2. 원격 창고 2. 원격 창고에서 세 가지 유형으로 나뉩니다. 2.1 Central Warehouse 2.2 개인 서버 2.3 기타 공공 창고
1. 이름에서 알 수 있듯이 로컬 창고는 Maven이 구성 요소를 로컬로 저장하는 곳입니다.
참고 : Maven이 설치된 후 Maven의 로컬 저장소는 생성되지 않습니다. Maven 명령이 처음으로 실행될 때만 생성됩니다.
Maven 로컬 리포지토리의 기본 위치 : Windows이든 Linux이든, 사용자 디렉토리에는 .m2/ Repository/ Repository 디렉토리가 있습니다. 이것은 Maven 저장소의 기본 위치입니다.
Maven의 기본 로컬 리포지토리의 위치를 변경하는 방법 : 여기에서 새로운 요소를 소개하고 싶습니다 : LocalRepository, Maven 's settings.xml 파일에 존재합니다.
1.1 사용자 전체를 구성하는 로컬 저장소를 변경하십시오. 먼저 /.m2/ 디렉토리에서 settings.xml 파일을 작성 한 다음 로컬 리포지토리 요소의 값을 원하는 저장소 주소로 ~/.m2/settings.xml로 설정하십시오.
<설정> <localRepository> d :/maven_new_repository </localrepository> </settings>
현재 Maven의 로컬 저장소 주소는 d :/maven_new_repository가됩니다. 참고 : 현재 구성된 Maven의 로컬 저장소는 사용자 범위에 속합니다.
1.2 구성 변경 전 세계적으로 전체 로컬 리포지토리 : M2_HOME/Conf/Settings.xml에서 구성 변경, 구성 변경 방법은 위와 동일합니다.
참고 :이 변경 후에는 모든 사용자에게 영향을 미치고 Maven이 업그레이드되면 모든 구성이 지워지므로 M2_Home/Conf/Settings.xml 파일을 미리 복사하여 백업해야합니다.
따라서 정상적인 상황에서는 Global Settings.xml의 구성을 권장하지 않습니다.
2. 원격 저장소
2.1 원격 창고와 관련하여 가장 핵심 중앙 창고부터 시작하십시오. 중앙 창고는 기본 원격 창고입니다. Maven이 설치되면 중앙 창고의 구성이 제공됩니다.
Maven Aggregation 및 Irheritance에서 우리는 모든 Maven 프로젝트가 Super Pom을 상속받을 것이라고 말했습니다. 특히 다음 구성이 포함 된 POM이 있으면 Super Pom이라고합니다.
<repositories> <repository> <id> Central </id> <name> 중앙 저장소 </name> <url> http://repo.maven.apache.org/maven2 </url> <layout> 기본값 </layout> <snapshots> <anabled> false> </enable>> </reposatory> </reposatory>
중앙 창고에는 가장 인기있는 오픈 소스 Java 구성 요소와 소스 코드, 저자 정보, SCM, 정보, 라이센스 정보 등이 포함되어 있습니다. 일반적으로 간단한 Java 프로젝트 종속성은 여기에서 다운로드 할 수 있습니다.
2.2 개인 서버
개인 서버는 특별한 원격 창고입니다. LAN에 설립 된 창고 서비스입니다. 개인 서버는 LAN의 Maven 사용자를위한 WAN의 원격 창고를 나타냅니다. Maven이 구성 요소를 다운로드 해야하는 경우 개인 서버에서 요청합니다. 개인 서버에 구성 요소가 존재하지 않으면 외부 원격 저장소에서 다운로드하여 개인 서버에서 캐시 한 다음 Maven의 다운로드 요청에 대한 서비스를 제공합니다. 외부 창고에서 개인 서버로 다운로드 할 수없는 일부 구성 요소를 업로드 할 수도 있습니다.
Maven Private Server의 기능 :
1. 외부 네트워크 대역폭 저장 : 반복 요청으로 인한 외부 네트워크 대역폭 소비 감소
2. Maven 구성 요소를 가속화하십시오 : 프로젝트가 많은 외부 원격 창고로 구성되면 건축 속도가 크게 줄어 듭니다.
3. 타사 구성 요소 배포 : 외부 창고에서 일부 구성 요소를 얻을 수없는 경우 내부 Maven 프로젝트에서 사용하기 위해 이러한 구성 요소를 내부 창고 (개인 서버)에 배포 할 수 있습니다.
4. 안정성 향상 및 제어 향상 : 인터넷이 불안정 해지면 Maven 구조도 불안정해질 것입니다. 일부 개인 서버 소프트웨어는 다른 기능도 제공합니다.
5. 중앙 창고의 부하 감소 : Maven Central 창고에 대한 요청 수는 엄청나고 개인 서버를 구성하면 중앙 창고의 압력을 크게 줄일 수 있습니다.
현재 주류 Maven 개인 서버 :
1. 아파치의 Archiva
2. JFrog의 인공물
3. Sonatype의 Nexus
3. 원격 창고 구성
원격 저장소 구성 새 구성 요소가 소개됩니다.
<repositories> 요소에서 <repository> 하위 요소를 사용하여 하나 이상의 원격 리포지토리를 선언 할 수 있습니다.
예:
<repository> <id> jboss </id> <name> jboss repository </name> <url> http://repository.jboss.com/maven2/ </url> <reludepolicy> daily </updatepolicy> <!-항상, 항상, 간격 n-> </enabled> <checksumpolicy> warn </checksumpolicy> <!-실패, 실패-> </릴리스> <snapshots> <enabled> false </enabled> </snapshots> <layout> default> </repository> </repository> </repository>
<ordudepolicy> 요소 : 업데이트 빈도를 나타내며, 값은 다음과 같습니다.
<checksumpolicy> 요소 : 파일을 확인하고 확인하는 Maven의 정책을 나타냅니다. 경고는 보안상의 이유에 대한 기본값입니다. 때로는 원격 창고의 액세스를 인증해야합니다. 일반적으로 인증 정보는 settings.xml에서 구성됩니다.
<서버> <server> <id> POM의 저장소 ID와 동일합니다 </id> <Ersername> username </username> <passwram> pwd </password> </server> </servers>
참고 : 여기의 ID는 POM에서 인증 해야하는 저장소 요소의 ID와 일치해야합니다.
생성 된 프로젝트를 원격 저장소에 배포하는 방법
이 작업을 완료하려면 POM에서 구성해야합니다. 다음은 새로운 요소입니다 : <DistributionManagement>
배포 관리에는 리포지토리와 스냅 샷 레포지토리의 2 개의 자식 요소가 포함됩니다. 전자는 버전 구성 요소를 게시하기위한 저장소를 나타내고 후자는 스냅 샷 버전의 저장소를 나타냅니다.
두 요소 모두 ID (원격 저장소의 고유 식별자), 이름, URL (저장소의 주소를 나타냄)을 구성해야합니다.
원격 창고에 부품을 배포하려면 인증이 필요합니다. 구성은 위와 동일합니다
구성이 올바른 후 실행됩니다 : MVN CLEN CLEAN 배포
스냅 샷을 올바르게보십시오
POM을 구성 할 때 스냅 샷 구성에 대해 매우주의를 기울이거나 스냅 샷 버전을 거의 사용하지 않았습니다. 그 이유는 여전히 불안정하고 시스템에 알려지지 않은 오류를 유발하기가 매우 쉽기 때문에 찾기가 어렵 기 때문입니다. 실제로 스냅 샷 버전은 쓸모가 없습니다. 스냅 샷의 가장 큰 목적은 개발 프로세스, 특히 모듈 종속성이있을 때 사용하는 것입니다. 예를 들어, A와 B는 동시에 개발됩니다. A는 B에 의존합니다. 개발 과정에서 A 및 B는 지속적으로 통합 된 개발이며 POM 파일을 지속적으로 수정하고 프로젝트를 구축합니다. 현재 버전 동기화는 큰 문제가됩니다. 스냅 샷을 사용하여 달성 할 수 있습니다.
실제로 Snapshot 버전이 출시되는 동안 Maven은 구성 요소를 현재 타임 스탬프에 자동으로 표시합니다. 이 타임 스탬프를 사용하면 언제든지 최신 스냅 샷 버전을 찾을 수있어 방금 언급 한 공동 개발 문제를 해결할 수 있습니다.
A가 B의 업데이트를 점검하는 방법에 대해서는 스냅 샷 구성에 업데이트 확인 빈도를 제어 할 수있는 요소가 있다고 구성에 대해 이야기 할 때 -------- updatePolicy
또한 명령 줄을 사용하여 매개 변수를 추가하여 Maven이 업데이트를 확인하도록 강요 할 수 있습니다. mvn clean install-U
Maven은 창고에서 구성 요소를 정확히 구조화합니까? ---- 저장소에서 의존성을 구문 분석하기위한 Maven의 메커니즘
1. 종속성의 범위가 시스템 인 경우 Maven은 로컬 파일 시스템에서 구성 요소를 직접 해결합니다.
2. 종속성 좌표를 기반으로 창고 경로를 계산 한 후 로컬 창고에서 직접 구성 요소를 찾으십시오. 해당 구성 요소가 발견되면 해상도가 성공합니다.
3. 로컬 리포지토리에 해당 구성 요소가없는 경우 종속 버전이 표시된 릴리스 버전 구성 요소 인 경우 모든 원격 저장소를 통해 반복하고 발견 후 다운로드합니다.
4. 종속 버전이 릴리스되거나 최신 인 경우 모든 원격 저장소의 메타 데이터는 업데이트 정책에 따라 읽히고 로컬 저장소의 해당 메타 데이터를 병합하고 릴리스 또는 최신 값의 실제 값을 계산 한 다음이 실제 값을 기반으로 로컬 저장소를 확인하십시오.
5. 종속 버전이 스냅 샷 인 경우 모든 원격 저장소의 메타 데이터는 업데이트 정책을 기반으로 읽히고 로컬 저장소의 해당 메타 데이터와 병합 한 다음 최신 스냅 샷 버전의 값을 가져온 다음 값을 기반으로 로컬 리포지토리를 확인하거나 원격 저장소에서 다운로드하십시오.
6. 마지막 구문 분석 된 아티팩트 버전이 타임 스탬프 형식의 스냅 샷 인 경우 파일을 타임 스탬프 형식으로 비 타임 램프 형식으로 복사 하고이 비 티 메트 램프 형식으로 아티팩트를 사용하십시오.
참고 : <pollend> <enabled> & <snapshot> <enabled>를 기억하십시오. 스냅 샷에 대해서도 마찬가지입니다.
POM을 선언 할 때는 최신 및 릴리스가 권장되지 않습니다. 플러그인 구성의 최신 및 릴리스는 Maven3에서 더 이상 지원되지 않습니다. 플러그인 버전이 설정되지 않은 경우 최종 버전은 릴리스와 동일합니다.
Maven은 최신 릴리스 빌드 만 구문 분석합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.