programing

Maven 저장소에서 오래된 종속성을 정리하는 방법은 무엇입니까?

goodcopy 2021. 1. 15. 19:15
반응형

Maven 저장소에서 오래된 종속성을 정리하는 방법은 무엇입니까?


maven이 다운로드 한 종속성을 저장하는 .m2 폴더에 파일이 너무 많습니다. 모든 오래된 종속성을 정리하는 방법이 있습니까? 예를 들어, 1, 2, 3의 3 가지 다른 버전에 대한 종속성이있는 경우 청소 후에는 세 번째 버전 만 있어야합니다. .m2 폴더의 모든 종속성에 대해 어떻게 할 수 있습니까?


Unix를 사용하는 경우 해당 파일의 액세스 시간을 사용할 수 있습니다. 파일 시스템에 대한 액세스 시간을 활성화 한 다음 종속성을 유지하려는 모든 프로젝트의 클린 빌드를 실행 한 다음 다음과 같은 작업을 수행하십시오 (UNTESTED!).

find ~/.m2 -amin +5 -iname '*.pom' | while read pom; do parent=`dirname "$pom"`; rm -Rf "$parent"; done

이렇게하면 5 분 이상 전에 마지막으로 액세스 한 모든 * .pom 파일을 찾고 (최대 5 분 전에 빌드를 시작했다고 가정) 해당 디렉토리를 삭제합니다.

rm 앞에 "echo"를 추가하여 'dry-run'을 수행하십시오.


짧은 대답 -.m2 폴더를 {user.home}. 예를 들어 Windows 10 사용자 홈에서는 C:\Users\user1. 를 사용하여 프로젝트를 다시 빌드하십시오 mvn clean package. 프로젝트에 필요한 종속성 만 남습니다.

Long Answer -.m2 폴더는 일반 폴더와 같으며 폴더의 내용은 다른 프로젝트에서 만들어집니다. 어떤 라이브러리가 "오래된"것인지 자동으로 알아낼 방법이 없다고 생각합니다. 사실 오래된 것은 모호한 단어입니다. 프로젝트에서 이전 버전의 라이브러리를 사용하는 데는 여러 가지 이유가있을 수 있으므로 어느 것이 사용되지 않는지 확인할 수 없습니다.

.m2 폴더를 삭제하고 모든 프로젝트를 다시 빌드하면 폴더가 필요한 모든 라이브러리로 자동 빌드됩니다.

모든 프로젝트에서 사용되는 특정 버전의 라이브러리에만 관심이있는 경우 프로젝트의 pom도 최신 버전으로 업데이트해야합니다. 즉, 서로 다른 POM이 서로 다른 버전의 라이브러리를 참조하는 경우 모두 .m2로 다운로드됩니다.


Maven 프로젝트에 대한 POM 파일이 주어지면 Apache Maven Dependency Plugin을 사용하여 로컬 저장소 (기본적으로 ~ / .m2 / respository)에서 모든 종속성을 제거 할 수 있습니다 .

여기에는 dependency:purge-local-repository로컬 저장소에서 프로젝트 종속성을 제거하고 선택적으로 다시 해결 하는 기능 이 포함 됩니다.

로컬 종속성을 정리하려면 선택적 매개 변수 reResolve 를 사용하고 기본적으로 true로 설정되어 있으므로 false로 설정해야합니다.

이 명령 줄 호출이 작동해야합니다.

mvn dependency:purge-local-repository -DreResolve=false

  1. 프로젝트의 모든 실제 종속성 다운로드

    find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
    
  2. 로컬 Maven 저장소를 임시 위치로 이동

    mv ~/.m2 ~/saved-m2
    
  3. 저장된 저장소의 모든 파일 maven-metadata-central.xml *을 maven-metadata.xml *로 이름을 바꿉니다.

    find . -type f -name "maven-metadata-central.xml*" -exec rename -v -- 's/-central//' '{}' \;
    
  4. 로컬 저장소의 수정 된 복사본을 미러로 설정하려면 ~ / .m2 디렉토리와 ~ / .m2 / settings.xml 파일을 다음 내용으로 만듭니다 ( 사용자 를 사용자 이름으로 바꿈 ).

    <settings>
     <mirrors>
      <mirror>
       <id>mycentral</id>
       <name>My Central</name>
       <url>file:/home/user/saved-m2/</url>
       <mirrorOf>central</mirrorOf>
      </mirror>
     </mirrors>
    </settings>
    
  5. 프로젝트 종속성을 다시 해결하십시오.

    find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
    
  6. 이제 최소한의 필요한 아티팩트가있는 로컬 Maven 저장소가 있습니다. 구성 파일 및 파일 시스템에서 로컬 미러를 제거합니다.


내 Maven 저장소에서도 오래된 종속성을 제거하고 싶었습니다. 나는 Florian의 대답을 실행하는 것에 대해 생각했지만 긴 리눅스 스 니펫을 기억하지 않고 반복해서 실행할 수있는 무언가를 원했고 약간의 구성 가능성이있는 무언가를 원했습니다. 프로그램은 더 많고 유닉스 명령 체인은 적습니다. , 그래서 나는 기본 아이디어를 가져와 (상대적으로 작은) Ruby 프로그램으로 만들었습니다. 이것은 마지막 액세스 시간을 기준으로 오래된 종속성을 제거합니다.

"이전 버전"을 제거하지는 않지만 실제로 두 가지 버전의 종속성이있는 두 개의 서로 다른 활성 프로젝트가있을 수 있으므로 어쨌든 내가 원하는 작업을 수행하지 않았을 것입니다. 대신 Florian의 답변과 마찬가지로 최근에 액세스하지 않은 종속성을 제거합니다.

사용해보고 싶다면 다음을 수행 할 수 있습니다.

  1. GitHub 저장소 방문
  2. 리포지토리 복제 또는 소스 다운로드
  3. 선택적으로 코드를 검사하여 악성이 아닌지 확인합니다.
  4. 운영 bin/mvnclean

기본 Maven 저장소를 재정의하고, 파일을 무시하고, 임계 값 날짜를 설정하는 옵션이 있지만 GitHub의 README에서 읽을 수 있습니다.

좀 더 많은 작업을 한 후 언젠가는 Ruby gem으로 패키징 할 것입니다. gem install mvnclean; mvnclean이미 Ruby를 설치하고 운영하고 있다면 문제 ( ) 를 단순화 할 것 입니다.


.m2-> repository 폴더 아래의 모든 콘텐츠를 정리하면됩니다. 프로젝트를 빌드 할 때 모든 종속성이 여기에로드됩니다.

귀하의 경우 프로젝트가 이전 버전의 종속성을 사용하고 이제 버전이 업그레이드되었을 수 있으므로 .m2 폴더를 더 잘 정리하고 mvn clean install로 프로젝트를 빌드하십시오.

Now dependencies with latest version modules will be downloaded in this folder.


I came up with a utility and hosted on GitHub to clean old versions of libraries in the local Maven repository. The utility, on its default execution removes all older versions of artifacts leaving only the latest ones. Optionally, it can remove all snapshots, sources, javadocs, and also groups or artifacts can be forced / excluded in this process. This cross platform also supports date based removal based on last access / download dates.

https://github.com/techpavan/mvn-repo-cleaner


You need to copy the dependency you need for project. Having these in hand please clear all the <dependency> tag embedded into <dependencies> tag from POM.XML file in your project.

After saving the file you will not see Maven Dependencies in your Libraries. Then please paste those <dependency> you have copied earlier.

The required jars will be automatically downloaded by Maven, you can see that too in the generated Maven Dependencies Libraries after saving the file.

Thanks.

ReferenceURL : https://stackoverflow.com/questions/19310650/how-to-clean-old-dependencies-from-maven-repositories

반응형