Apache Maven의 캐시를 지우려면 어떻게합니까?


213

최근 Apache Maven에 캐싱 문제가있는 것 같습니다. Windows Vista 또는 Windows 7을 사용하여 프로젝트에서 새로 설치를 수행하면 최신 아티팩트 파일이 업데이트 된 경우에도 이전 빌드와 동일한 데이터로 아티팩트가 생성되는 경우가 있습니다.

maven이 빌드해야 할 로컬 아티팩트의 클린 빌드를 항상 트리거하도록이 캐시를 지우는 방법이 있습니까?

특히 war 플러그인으로 webapp을 빌드하는 데 문제가 있습니다. 메이븐 버전은 3.0.3입니다. 전쟁 플러그인 버전은 2.1.1입니다.


2
-U이슈를 업데이트 할 플래그 를 사용해 보셨습니까 ?
Amir Raminfar

2
더 자세한 정보를 줄 수 있습니까? 부양 가족이 전쟁 중에 업데이트되지 않습니까? 그렇다면 부양 가족이 SNAPSHOT 버전을 가지고 있습니까?
Raghuram

멀티 모듈 프로젝트입니까? 종속 모듈의 버전 번호를 확인 했습니까? 재현 할 수 있습니까? mvn clean install새 아티팩트를 로컬 저장소에 넣습니까?
palacsint

@ MetroidFan2002 여기에 표시된 답변을 부탁드립니다. 또는 스스로 찾은 경우 솔루션을 작성할 수 있습니다.
Naman

1
mvn clean install -Dmaven.repo.local=/alternate/repo/location
Gayan Weerakutti

답변:


225

아티팩트 (또는 전체 로컬 저장소)를 c:\Users\<username>\.m2\repository직접 삭제하십시오 .


4
이미 시도했지만 작동하지 않았습니다. 그래도 제안 해 주셔서 감사합니다.
MetroidFan2002

3
그것은 다시 시작한 후에도 많은 maven 인공물이 그것들을 다루는 The action can't be completed because the folder or file in it is open in another program. Close the folder or file and try again.
것처럼 보입니다

1
폴더 위치는 시스템마다 다를 수 있습니다 . maven repo 폴더 경로를 얻는 방법 은 이 답변 을 참조하십시오
jakub.g

9
@ 여기에 같은 liltitus27, 단지 ~ / .m2 / 저장소 작업을하지 않았다 쓸어, mvn dependency:purge-local-repository마침내 일
qbert65536

예, 이것은 100 % 효과가
Graeme Phillips

176

로컬 캐시를 정리하려면 종속성 플러그인을 사용하십시오.

  1. mvn dependency:purge-local-repository: 이것은 로컬 저장소 파일을 삭제하려는 시도이지만 항목이 제거 된 후에는 항상 로컬 저장소를 채우고 채 웁니다.
  2. mvn dependency:purge-local-repository -DreResolve=false: 이렇게하면 종속성이 다시 해결되지 않지만 때때로 네트워크로 이동하는 것 같습니다.
  3. mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false: 이것은 Paweł Prażak에 의해 추가되었으며 잘 작동하는 것 같습니다. 로컬 저장소를 비우려면 세 번째를 사용하고 로컬 저장소를 버리고 종속성을 다시 얻으려면 첫 번째를 사용하십시오.

4
그들 사이의 차이점은 무엇입니까?
Pieter De Bie

13
첫 번째는 로컬 리포지토리 파일을 삭제하려는 시도이지만 항목을 제거한 후에는 항상 로컬 리포지토리를 채우고 채 웁니다. 두 번째는 종속성의 다시 해결을 피하지만 여전히 네트워크로 이동하는 것 같습니다. 세 번째는 Paweł Prażak에 의해 추가되었으며 잘 작동하는 것 같습니다. 로컬 저장소를 비우려면 세 번째를 사용하고 로컬 저장소를 버리고 종속성을 다시 얻으려면 첫 번째를 사용하십시오.
Brian C.

Linux 시스템의 명령 행에서. mvn을 설치해야합니다. maven.apache.org/install.html
Brian C.

추가 매개 변수를 사용하여 특정 그룹 / 아티팩트를 대상으로 할 수 있다고 덧붙입니다. 이 답변은 내가 찾던 것입니다 (옵션 3). 여기에 추가 매개 변수 ::: MVN 의존성은 다음과 같습니다 퍼지 - 로컬 저장소 -DmanualInclude = "myGroupId"-DsnapshotsOnly = 사실 -DactTransitively = 거짓 -DreResolve = 거짓
granadaCoder

로컬 저장소 내의 모든 내용을 삭제하기 위해 세 번째 옵션을 시도했지만 작동하지 않습니다.이 시점 까지이 목표를 달성하는 독특한 방법은 해당 디렉토리의 모든 내용을 수동으로 삭제하는 것입니다. 나는이 로컬 저장소 가 아닌 다른 위치에 <User_Name>/.m2위치. 그것이 이유인지 확실하지 않습니다.
Manuel Jordan

13

당신은 / 체크 변경 updatePolicy의 당신에 저장소에 대한 설정을 settings.xml.

이 요소는 업데이트 발생 빈도를 지정합니다. Maven은 리포지토리의 maven-metadata 파일에 저장된 로컬 POM의 타임 스탬프를 원격과 비교합니다. 항상, 매일 (기본값), 간격 : X (여기서 X는 분 단위의 정수) 또는 없음 중에서 선택할 수 있습니다.

로 설정해보십시오 always.


1
이와 anway 거래에 사용할 수있는 도움 ... 난이없는 <updatePolicy>내 pom.xml 파일에 있지만,이<snapshotPolicy>
알 Lelopath

updatePolicy는 항상 settings.xml의 모든 위치로 설정되어 있습니다.
MasterJoe2

11

나는 다음을 할 것이다 :

mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false --fail-at-end

플래그는 maven에게 종속성을 해결하거나 네트워크에 충돌하지 않도록 지시합니다. 로컬로 보이는 것을 삭제하십시오.

그리고 좋은 측정을 위해서는 --fail-at-end끝까지 오류 ( )를 무시 하십시오. 이것은 다소 엉망인 종속성 세트가 있거나 다소 엉망인 내부 저장소에 의존하는 프로젝트에 유용합니다 (발생합니다).


1
이런 종류의 정리를 위해 단순히 로컬 캐시 폴더를 삭제하는 것만으로는 충분하지 않습니까?

1
모든 단일 전이 의존성을 알고 있다면 가능합니다. 그러나 그것은 지루해집니다 (또는 우리는 단지 전체 캐시를 삭제할 수 있지만 maven은 문제가있는 이슈와 관련이없는 것을 위해 모든 것을 다시 다운로드해야합니다). 그것은 모두 상황의 세부 사항에 달려 있습니다.
luis.espinal

6

이것은 Spring Tool Suite v 3.1.0.RELEASE에서 작동하지만 Eclipse에서도 사용할 수 있다고 생각합니다.

/username/.m2디렉토리 에서 아티팩트를 수동으로 삭제 한 후 (위의 palacsint로 표시됨) 다음을 수행하여 파일의 색인을 다시 작성하십시오.

이동 :

  • Windows->Preferences->Maven->User Settings 메뉴.

텍스트 상자 Reindex옆 의 버튼을 클릭하십시오 Local Repository. "적용"을 클릭 한 다음 "확인"을 클릭하면 완료됩니다.


2

일부 답변에서 지적했듯이 때로는 로컬 저장소를 완전히 삭제 하려고합니다. 예를 들어 더 이상 pom에서 참조하지 않으므로 제거 할 수없는 아티팩트가있을 수 있습니다.

clean를 들어이 삭제를 Maven 단계에 포함 시키려면 다음 maven-clean-plugin과 같이 설정을 통해 저장소에 액세스하고 액세스 할 수 있습니다 .

 <plugin>
    <inherited>false</inherited>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.1</version>
    <executions>
        <execution>
            <phase>clean</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo>Base clean is attached to deleting local maven cache</echo>
                    <echo>${settings.localRepository}</echo>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
    <inherited>false</inherited>
    <artifactId>maven-clean-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <filesets>
            <fileset>
                <directory>${settings.localRepository}</directory>
            </fileset>
        </filesets>
    </configuration>
</plugin>

2

mvn dependency:purge-local-repository -DactTransitively=false -Dskip=truemaven 플러그인을 모듈 중 하나로 사용하는 경우 사용하십시오 . 그렇지 않으면 Maven은 다시 컴파일하려고 시도하여 종속성을 다시 다운로드합니다.


1
MVN 의존성 :이 실제로 내가 찾고 있었는지, 그냥 (스킵에 대한 대시 누락) 오타가 퍼지-지역을-저장소 -DactTransitively = 거짓 -Dskip = TRUE
shoguren

0

나는이 같은 문제를 겪었고 그것을하기 위해 쉘에 하나의 라이너를 썼다.

rm -rf $(mvn help:evaluate -Dexpression=settings.localRepository\
                       -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN -B \
                       -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn | grep -vF '[INFO]')/*

필요할 때마다 간단히 이것을 실행하기 위해 Jenkins 프로젝트를 원했기 때문에 하나의 라이너로했습니다. 그래서 물건 등에 로그온 할 필요가 없습니다. 쉘 스크립트를 허용한다면, 당신은 그것을 청소기로 쓸 수 있습니다 :

#!/usr/bin/env bash
REPOSITORY=$(mvn help:evaluate \
  -Dexpression=settings.localRepository \
  -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN \
  -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
  --batch-mode \
  | grep -vF '[INFO]')

rm -rf $REPOSITORY/*

작동해야하지만 해당 스크립트를 모두 테스트하지는 않았습니다. (첫 번째 명령은 테스트했지만 전체 스크립트는 테스트하지 않았습니다.)이 방법에는 복잡한 명령을 먼저 실행하는 단점이 있습니다. dem 등원이므로 스스로 테스트 할 수 있습니다. 삭제는 나중에 자체 명령이므로 확인없이 삭제 명령을 신뢰해서는 안되기 때문에 모든 시도를 시도하고 생각한대로 수행되는지 확인할 수 있습니다. 그러나 한 가지 이유에서 현명합니다. 휴대 성이 뛰어납니다. settings.xml 파일을 존중합니다. 이 명령을 실행 중이고 maven에게 특정 xml 파일 (-s 또는 --settings 인수)을 사용하도록 지시하면 여전히 작동합니다. 따라서 모든 곳에서 모든 것이 똑같은지 확인하지 않아도됩니다.

약간 비싸지 만 사업을하는 괜찮은 방법입니다 .IMO.


-3

따라서 청소에 사용할 수있는 몇 가지 명령이 있습니다.

 1. mvn clean cache   
 2. mvn clean install 
 3. mvn clean install -Pclean-database

또한 .m2에서 저장소 폴더를 삭제하면 도움이 될 수 있습니다.


1
"mvn clean cache"는 무엇을해야합니까? 그것은 나를 위해 인정 된 명령이 아닌 것 같습니다.
AMTerp December
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.