mvn clean 설치를 맹목적으로 실행하지 마십시오...

5313 단어

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
    
  • 또는maven이reactor를 활성화하는 동시에 웹 프로젝트와 의존항을 구축한다고 명확하게 알려줍니다
  • 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 안내서의

  • 사진 Milan Popovic
  • 좋은 웹페이지 즐겨찾기