maven의 유통관리 조직 전체를 지정하는 방법
많은 maven2 프로젝트(약 50개 이상)를 중앙 넥서스 저장소에 도입할 수 있도록 정리하는 방법을 찾고 있습니다.「 」를 하는 mvn deploy
유통 관리
<distributionManagement>
<repository>
<id>nexus-site</id>
<url>http://central_nexus/server</url>
</repository>
</distributionManagement>
(50+의) 모든 pom.xml이 이 블록을 반복해서 포함하는 것은 원하지 않습니다.은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★.settings.xml
파일입니다만, 거기서 정의하는 것은(설계상) 불가능한 것 같습니다.첫 은 '그럴까?' 입니다maven2 distribution settings.xml 에 、 maven2 distribution 。
pom을 이 .<parent>
태그입니다만, 멀티 모듈 빌드에서는 이상합니다.
- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
- Project 1 module pom (with pm as parent)
- Project 2 module pom (with pm as parent)
보통 모든 문서에서 모듈 poms는 부모 pom을 사용해야 하며 다른 pom을 사용해야 한다고 읽습니다.그러나 상속 v. 집계에 대한 maven 웹사이트를 읽고 난 후, 그것은 정말로 가능하다고 쓰여 있습니다.
maven 사이트 생성에 문제가 있는 것 같습니다(모듈은 직접 백레퍼런스가 없으면 올바르게 링크되지 않습니다).
그렇다면, 이것이 유효한 접근법일까요?그 밖에 더 명확하고 간단한 문제 해결 방법이 있습니까?
이를 위한 최선의 솔루션은 조직의 모든 프로젝트에 대해 일반적으로 단순한 부모 폼 파일 프로젝트(패키지 '폼' 포함)를 작성하는 것입니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>your.company</groupId>
<artifactId>company-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<distributionManagement>
<repository>
<id>nexus-site</id>
<url>http://central_nexus/server</url>
</repository>
</distributionManagement>
</project>
로컬 nexus에 구축, 릴리스 및 배포할 수 있으므로 모든 사용자가 아티팩트에 액세스할 수 있습니다.
사용하고 싶은 프로젝트에 대해서는, 다음의 항을 참조해 주세요.
<parent>
<groupId>your.company</groupId>
<artifactId>company-parent</artifactId>
<version>1.0.0</version>
</parent>
이 솔루션을 사용하면 회사의 모든 프로젝트에 다른 공통점을 쉽게 추가할 수 있습니다.예를 들어 JUnit 사용을 특정 버전으로 표준화하려면 이 방법이 가장 적합합니다.
자신의 부모를 가진 멀티 모듈 구조를 사용하는 프로젝트가 있는 경우, Maven은 상속 체인을 지원하므로 프로젝트의 부모 폼 파일이 회사의 부모 폼을 참조하도록 하거나 프로젝트의 자녀 모듈이 회사의 부모 폼을 인식하지 못하게 하는 것이 완벽하게 허용됩니다.
저는 당신의 예시적인 프로젝트 구조에서 당신이 당신의 부모 프로젝트를 당신의 애그리게이터 pom과 같은 수준으로 하려고 한다는 것을 알 수 있습니다.프로젝트에 자체 부모가 필요한 경우, 제가 찾은 최선의 접근법은 다른 모듈과 동일한 수준의 부모를 포함하고 모든 모듈의 디렉토리가 존재하는 루트에 애그리게이터 pom.xml 파일을 두는 것입니다.
- pom.xml (aggregator)
- project-parent
- project-module1
- project-module2
이 구조에서는 부모 모듈을 애그리게이터에 포함시켜 모든 것을 구축합니다.mvn install
root 디렉토리에서.
저희 조직에서는 이 솔루션을 정확하게 사용하고 있으며, 오랜 세월의 테스트에도 잘 견디고 있습니다.
부모 POM은 필요 없습니다.
poms에서 distribution Management 부분을 모두 생략하고 빌드 서버 또는 settings.xml에서 설정할 수 있습니다.
빌드 서버에서 이 작업을 수행하려면mvn
명령어:
-DaltSnapshotDeploymentRepository=snapshots::default::https://YOUR_NEXUS_URL/snapshots
-DaltReleaseDeploymentRepository=releases::default::https://YOUR_NEXUS_URL/releases
설정할 수 있는 옵션의 상세한 것에 대하여는, https://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html 를 참조해 주세요.
또, 이 설정도 가능합니다.settings.xml
.
사용하도록 설정되고 속성이 포함된 프로파일을 생성하기만 하면 됩니다.
settings.xml의 예:
<settings>
[...]
<profiles>
<profile>
<id>nexus</id>
<properties>
<altSnapshotDeploymentRepository>snapshots::default::https://YOUR_NEXUS_URL/snapshots</altSnapshotDeploymentRepository>
<altReleaseDeploymentRepository>releases::default::https://YOUR_NEXUS_URL/releases</altReleaseDeploymentRepository>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
"스냅샷" 및 "릴리스" 자격 증명이<servers>
settings.xml 섹션
altSnapshotDeploymentRepository 및 altReleaseDeploymentRepository 속성은 maven-deploy-plugin 버전 2.8에서 도입되었습니다.이전 버전은 오류 메시지와 함께 실패합니다.
Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter
이 문제를 해결하려면 새 버전의 플러그인을 적용하십시오.
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8</version>
</plugin>
</plugins>
</pluginManagement>
</build>
마이클 와이라즈의 답변에 대해서요.alt*DeploymentRepository
당신의 안에서settings.xml
maven-deploy-plugin 버전 3.0.0-M1(작성 시 최신 버전)을 사용하는 경우 이 버전에는 서버 인증 문제를 일으킬 수 있는 버그가 있습니다.
회피책은 다음과 같습니다.값:
releases::default::https://YOUR_NEXUS_URL/releases
를 삭제해야 합니다.default
섹션, 만들기:
releases::https://YOUR_NEXUS_URL/releases
이전 버전 2.8.2에는 이 오류가 없습니다.
언급URL : https://stackoverflow.com/questions/3298135/how-to-specify-mavens-distributionmanagement-organisation-wide
'source' 카테고리의 다른 글
어레이 인덱스가 바인딩되지 않은 동작 (0) | 2022.10.30 |
---|---|
간단한 JSON 라이브러리를 사용하여 json 파일을 Java로 읽는 방법 (0) | 2022.10.30 |
응답 코드 220이 필요하지만 Larabel에서 메시지 ""과 함께 코드 ""가 수신되었습니다. (0) | 2022.10.29 |
Vuejs 공유 무선 구성 요소가 렌더에서 확인되지 않음 (0) | 2022.10.29 |
MySQL 다중 왼쪽 결합 제한 (0) | 2022.10.29 |