Maven의 로컬 저장소 위치를 CLI 매개 변수로 지정


131

Maven 명령 행에서 로컬 Maven 저장소의 위치를 ​​인수로 설정할 수 있습니까?

문제는에서 기본값을 사용하지 않는다는 것입니다 ~/.m2/repository. 그러나 나는 자체 설정으로 빌드중인 일부 프로젝트를 확인했습니다 -s settings.xml. 그 settings.xml은 로컬 저장소를 지정하지 않으므로 Maven은 ~/.m2/repository다시 사용 합니다 ... <localRepository>프로젝트의 settings.xml에 요소 를 추가하지 않고 기본이 아닌 로컬 저장소 위치를 사용하고 싶습니다.

난 노력 했어

  • -DlocalRepository="..."
  • $mvn invoker:run -s settings.xml clean install -DskipTests -DlocalRepositoryPath=
  • -Dsettings.localRepository

그러나 이러한 옵션 중 어느 것도 작동하지 않습니다.

따라서 타사 settings.xml을 수정할 것인지 로컬 리포지토리로 옮길 것인지 결정해야한다고 생각합니다. ~


분명히 이것은 당신의 잘못이 아니지만 Maven 프로젝트는를 제공해서는 안됩니다 settings.xml. 참조 maven.apache.org/guides/mini/guide-configuring-maven.html
oberlies

답변:


258

maven 속성 사용 maven.repo.local:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

수정 settings.xml이 필요하지 않습니다.


10
로컬 저장소는 절대 경로 maven.apache.org/guides/mini/guide-configuring-maven.html이어야 합니다.
luka5z

3
Windows에서`mvn -D "maven.repo.local"= % USER_HOME % /. my / other / repository 새로 설치`
Igor Bljahhin

같은 것을 달성하기 위해 환경 변수를 설정할 수 있습니까?
powder366

@ powder366 no, AFAIK
Petr Kozelka

maven-3.6.3을 사용하면 로컬 리포지토리 디렉토리가 상대 경로로 작동합니다 (최소한 MacOS에서는)
Ed Randall

8

자식의 경우 :

alias mvn='mvn "-Dmaven.repo.local=$(git rev-parse --show-toplevel)/.m2/repository"'

이것은 각 자식 저장소에서 별도의 메이븐 저장소를 사용합니다.


2

작동하는 해키 방법 중 하나는 다음과 같습니다.

  1. <localRepository>${m2.localRepository}</localRepository>settings.xml에 추가
  2. mvn.sh 또는 mvn.bat에서 실행되는 명령에서 "$ @" -Dm2.localRepository=<full path to home dir>/.m2/repository 앞에 추가하십시오 . 이렇게하면 기본 로컬 리포지토리가 원래 위치에 유지됩니다.
  3. 이제 사용할 수 있습니다 mvn -Dm2.localRepository=... <phases/goals>. 명령 행 시스템 특성이 mvn 스크립트의 명령 행 다음에 명령 행에 추가되므로 우선권을 갖습니다. (적어도 나는 그것이 윈도우와 리눅스 모두에서 그런 식으로 작동한다고 확신하지만 테스트는 말할 것입니다.)

도움이되지 않습니다. "$ @"앞에 -Dm2.localRepository = "custom"을 mvn 스크립트에 추가했지만 여전히 ~ / .m2 / repository를 사용합니다 ... 그런 다음 실행할 때 -Dm2.localRepository = "custom"도 포함했습니다 $ mvn, 여전히 ~ / .m2 / repository를 사용합니다. settings.xml에 localRepository 요소가 없으면 간단히 변경할 수있는 방법이 없습니다
lisak

@lisak : settings.xml에 localRepository 요소를 추가하는 1 단계를 수행 했습니까? 나는 이것을 테스트했으며 실제로 mvn 스크립트에서 '~'별명을 사용할 수 없다는 것을 제외하고는 효과가 있습니다. 절대 경로를 입력해야하지만, 다른 쉘 / 배치 스크립트 트릭을 사용하여 해결할 수 있습니다.
라이언 스튜어트

작동하지만 실제로 설명이 없습니다 ... 2 단계없이 $ M2_HOME / conf / settings.xml에서 localRepository를 선언하면 -s settings.xml로 대체되고 2 단계에서는 작동하지 않습니다. 그것은 작동하지만 ... $ M2_HOME / conf / settings.xml에 localRepository가없는 2 단계 만 작동하지 않습니다 ... 1, 2 단계를 모두 적용해야 작동하며 심지어 $ mvn을 통해 위치를 변경할 수도 있습니다 -Dm2.localRepository = .. 감사 라이언
lisak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.