mvn clean 설치를 맹목적으로 실행하지 마십시오...
TL;박사
나를 믿어라, 너는 거의
install
골을 넣고 싶지 않다.가공소재를 작성하려면 다음 명령을 사용합니다.
mvn package
모험심이 있다면 가끔씩 -D skipTests
에 가입할 수 있다.😉테스트를 실행하려면(예: CI 구조에서) 다음 명령을 사용합니다.
mvn verify
만약 당신이 믿지 않는다면, 계속 읽으세요.maven 설치 대상 정보
mvn clean install
이 소프트웨어 구축의 goto 명령으로 넘겨진 지 여러 해가 되었습니다.하지만 실제로는 당신이 원하는 것보다 더 많이 할 수 있다.우리는 청소를 해야 합니까, 아니면?
첫 번째 일: 왜 우리는 명령 앞에
clean
을 추가합니까?그럼 목표 디렉터리는 유행이 지난 물건을 저장할 수 있죠?당신은 이와 관련된 사례를 기억하십니까?Maven은 일반적으로 목표 디렉터리에 남은 모든 내용을 처리할 수 있을 정도로 똑똑하다.아니면 내가 그것을 상당히 어리석다고 말해야 합니까?Maven은 더 많은 불필요한 내용을 구축하는 경향이 있습니다. 왜냐하면 yeolde autotools와 달리 원본과 목표 항목의 파일 시간 스탬프를 고려하지 않아서 작업량을 줄일 수 있습니다.자바나 JVM을 기반으로 한 프로젝트에서 이것은 어쨌든 어려운 임무라고 말할 수 있다.모든 ".java"파일이 이미 알고 있는 출력 파일에 명확하게 비치는 것은 아닙니다.내부류나 익명류를 생각해봐.clean
의 목표는 프로젝트의 각 모듈에 있는 각 대상 폴더를 삭제하는 것입니다.다음 라이프 사이클 단계에서만 즉시 다시 생성합니다.따라서, 내 조언은, 만약 당신이 왜 clean을 사용해야 하는지 꼭 알지 못한다면, 이렇게 하지 마세요. 대부분의 경우 좋습니다.설치는 항상 유효합니다. 그렇습니까?
만약 네가 다행히도 이른바'다모듈'프로젝트에 참여한 적이 있다면, 너는 그 고통을 알게 될 것이다.프로젝트 간의 의존 관계를 어떻게 해결하는지에 대해 이야기할 때, Maven은 정말 그렇게 직관적이지 않다.조만간 누군가가'응, 현지 환매에 의존항을 설치해야 해'라고 알려줄 것이다. 그때부터 가끔
mvn clean install
을 운행하는 것은 일상적인 일일 뿐이다.다음과 같은 단순화된 프로젝트 구조를 살펴보십시오.
우리는 루트 프로젝트 (통상적으로'부자 프로젝트') 와 세 개의 하위 프로젝트'핵심','cli','웹'을 가지고 있다.'웹'과'cli'는 모두'핵심'모델에 의존하는 것을 볼 수 있다.이것은 매우 흔히 볼 수 있는 구조로 그 중에서 대부분의 코드는'핵심'모듈에 위치할 수 있고 웹 모듈의 웹 전단 등 서로 다른 측면에서 핵심 기능에 의존할 수 있다.
핵심 모듈의 일부 내용을 변경하면 의존하는cli나 웹 모듈이 다음 버전에서 자동으로 이 변경 사항을 받아들일 수 있습니까?물론 이 문제의 답은 상황에 따라 결정된다!
maven의 매우 직관적이지 않은 기본 설정은 로컬 maven 저장소에서 의존 항목을 찾는 것입니다.그것은
~/.m2/repostory
입니다.의존 항목이 같은 다중 모듈 항목에 맞다면, 이 기본값도 적용됩니다.현재 신속한 복구는 당연히 install
을 운행한다.물론, 문제는 지금 당신이 고정된 (스냅샷?) 을 가지고 있다는 것이다로컬 리셋 코드 버전으로 구축하고 복사합니다.이것은 자동으로 업데이트되지 않습니다.추가 변경을 수행하면 보조 모듈이 다시 표시되지 않습니다.이것은 사람을 낙담하게 하는 디버깅 주기를 초래할 수 있다.'설치 댄스'를 잊어버리고 똑같은 일을 다시 해야 한다는 것을 기억해라.가동 원자로
마ven이 먼저 로컬 프로젝트에서 의존 항목을 찾는 것을 알려줄 수 있는 방법이 있습니다.Maven은 원자로라는 것을 활성화시켜 이를 실현한다.흥미로운 것은,maven이reactor를 실제로 사용했는지의 여부입니다. 기본적으로 실행하려는 목표(또는 생명주기 단계)에 달려 있습니다.기본적으로
install
, package
, verify
등 목표는 원자로를 사용한다.이것이 바로 당신이 install
을 의존적인 문제를 해결하는 방법이라고 생각할 수 있는 이유입니다.한편 compile
같은 목표는 기본적으로 원자로를 사용하지 않는다.그들은 기꺼이 너의 현지 환매 협의에서 유행이 지난 의존항을 직접 사용하려고 한다.그렇다면 위에서 언급한 예시 프로젝트의 웹 작업만 구축하려면 어떻게 해야 합니까?우리는 원자로를 가동해서 최신
core.jar
을 우리의 web.war
에 묶어야 한다.install
을 실행하지 않고도 두 가지 방법으로 이 작업을 수행할 수 있으므로 시스템에 불필요한 작업을 가져오지 않습니다.cd root
mvn package
cd root
mvn compile -pl web -am
The take away here is that simply specifying a "project list" via
-pl
is enough to use the reactor.
기본적으로 마븐이 출력하는 예쁜 구축 요약을 알아차렸습니까?이것은 실제로 원자로 요약이라고 불리는데 다음과 같다.
[INFO] Reactor Summary for parent 0.0.1-SNAPSHOT:
[INFO]
[INFO] parent ............................................. SUCCESS [ 0.011 s]
[INFO] core ............................................... SUCCESS [ 1.590 s]
[INFO] cli ................................................ SUCCESS [ 1.518 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.273 s
[INFO] Finished at: 2020-10-13T18:09:21+02:00
[INFO] ------------------------------------------------------------------------
평론
나는 일찍이 마코 벨러(Marco Behler)의 Blog 댓글에 제목이 완전히 같은 블로그 글을 쓴 적이 있는데, 이 글은 대개조하기 전에 쓴 것이다.지금까지, 말은 그 블로그를 대체하기 위해 마븐에 관한 광범위한 안내서를 사용할 수 있었다. 링크 부분에서 이 안내서의 링크를 찾을 수 있다.
링크
Marco Behler "mvn 청결 설치"에 대한 dept 안내서의
Reference
이 문제에 관하여(mvn clean 설치를 맹목적으로 실행하지 마십시오...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aeisele/don-t-just-blindly-run-mvn-clean-install-3f73텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)