Es ist mehr als 6 Jahre her, seit die Frage gestellt wurde, aber ich habe kein Tool gefunden, um mein Repository zu bereinigen. Also habe ich selbst eine in Python geschrieben, um alte Gläser loszuwerden. Vielleicht ist es für jemanden nützlich:
from os.path import isdir
from os import listdir
import re
import shutil
dry_run = False
m2_path = '/home/jb/.m2/repository/'
version_regex = '^\d[.\d]*$'
def check_and_clean(path):
files = listdir(path)
for file in files:
if not isdir('/'.join([path, file])):
return
last = check_if_versions(files)
if last is None:
for file in files:
check_and_clean('/'.join([path, file]))
elif len(files) == 1:
return
else:
print('update ' + path.split(m2_path)[1])
for file in files:
if file == last:
continue
print(file + ' (newer version: ' + last + ')')
if not dry_run:
shutil.rmtree('/'.join([path, file]))
def check_if_versions(files):
if len(files) == 0:
return None
last = ''
for file in files:
if re.match(version_regex, file):
if last == '':
last = file
if len(last.split('.')) == len(file.split('.')):
for (current, new) in zip(last.split('.'), file.split('.')):
if int(new) > int(current):
last = file
break
elif int(new) < int(current):
break
else:
return None
else:
return None
return last
check_and_clean(m2_path)
Es sucht rekursiv im .m2
Repository und wenn es einen Katalog findet, in dem sich verschiedene Versionen befinden, werden alle bis auf die neueste Version entfernt.
Angenommen, Sie haben den folgenden Baum irgendwo in Ihrem .m2-Repo:
.
└── antlr
├── 2.7.2
│ ├── antlr-2.7.2.jar
│ ├── antlr-2.7.2.jar.sha1
│ ├── antlr-2.7.2.pom
│ ├── antlr-2.7.2.pom.sha1
│ └── _remote.repositories
└── 2.7.7
├── antlr-2.7.7.jar
├── antlr-2.7.7.jar.sha1
├── antlr-2.7.7.pom
├── antlr-2.7.7.pom.sha1
└── _remote.repositories
Dann entfernt das Skript Version 2.7.2 von antlr und es bleibt:
.
└── antlr
└── 2.7.7
├── antlr-2.7.7.jar
├── antlr-2.7.7.jar.sha1
├── antlr-2.7.7.pom
├── antlr-2.7.7.pom.sha1
└── _remote.repositories
Wenn eine alte Version, die Sie aktiv verwenden, entfernt wird. Es kann einfach mit maven (oder anderen Tools, die Abhängigkeiten verwalten) wiederhergestellt werden.
Sie können ein Protokoll darüber erhalten, was entfernt werden soll, ohne es tatsächlich durch Entfernen zu entfernen dry_run = False
. Die Ausgabe sieht folgendermaßen aus:
update /org/projectlombok/lombok
1.18.2 (newer version: 1.18.6)
1.16.20 (newer version: 1.18.6)
Dies bedeutet, dass die Versionen 1.16.20 und 1.18.2 von lombok entfernt und 1.18.6 unberührt bleiben.
Die Datei befindet sich auf meinem Github (die neueste Version).
.m2repository
Ordner. Es wird automatisch erstellt, sobald Sie das Projekt kompilieren.