para - plugins eclipse java
¿Cómo eliminar las versiones antiguas de los complementos de Eclipse? (8)
Con Ganymede (3.4), la forma correcta de administrar tus complementos sería colocarlos en la carpeta '' dropins '':
/[eclipse/]/dropins/eclemma1.3.1/eclipse/(plugins|features)
Ese complemento será detectado por el mecanismo de aprovisionamiento ''p2'' y utilizado, pero no copiado en los complementos y con directorios de eclipse . Permanece en la carpeta de dropins.
Cuando elimine eclemma1.3.2, todo lo que tiene que hacer es eliminar eclemma1.3.1 de su directorio de dropins, y esa versión anterior ya no está.
Después de la actualización, los plugins antiguos de Eclipse permanecen en la carpeta "complementos" (también hay restos en la carpeta "características").
¿Hay alguna forma de eliminar esos automáticamente?
Creé un script en python para mover los plugins anteriores a una carpeta de respaldo, de modo que si algo sale mal, puede regresar. La secuencia de comandos tiene dos modos de operación: modo manual le pregunta qué hacer con cada complemento duplicado detectado, y pregunta automática solamente en los casos en que la longitud de la cadena ha cambiado y, por lo tanto, puede haber cambiado el sistema o la numeración de la versión.
Espero que esto ayude a alguien
# -*- coding: utf-8 -*-
import os
import re
from datetime import datetime
directory="C://eclipse64//plugins"
dirBackup="C://eclipse64//PluginsBackup" #This folder is a kind of recycle bin for save deleted plugins. In case you have problems running eclipse after remove them you can restore them. If you don''t detect any problem you can erase this folder to save disk space
manual=False #Verifying deletion of each plugin manually (True) or automatic (False)
def globRegEx(directory,pat,absolutePath=True,type_=0):
''''''Function that given a directory and a regular pattern returns a list of files that meets the pattern
:param str directory: Base path where we search for files that meet the pattern
:param str pat: Regular expression that selected files must match
:param bool absolutePath: Optional parameter that indicates if the returned list contains absolute (True) or relative paths (False)
:param int type_: Type of selection 0: selects files and directories 1: only selects files 2: only selects directories
:return: a list with the paths that meet the regular pattern
''''''
names=os.listdir(directory)
pat=re.compile(pat)
res=[]
for name in names:
if pat.match(name):
path=directory+os.sep+name
if type_==1 and os.path.isfile(path):
res.append(path if absolutePath else name)
elif type_==2 and os.path.isdir(path):
res.append(path if absolutePath else name)
elif type_==0:
res.append(path if absolutePath else name)
return(res)
def processRepeated(repList):
'''''' this function is responsible for leaving only the newer version of the plugin
''''''
if repList and len(repList)>1: #If the plugin is repeated
repList.sort(reverse=True)
print("Repeated plugins found:")
min=len(repList[0]) # If strings haven''t got the same length indicates a change in the numeration version system
max=min
newer=datetime.fromtimestamp(0)
sel=0
for i,path in enumerate(repList):
lr=len(path)
modifDate=datetime.fromtimestamp((os.path.getctime(path)))
if modifDate>newer: #Keep the last creation date and its index
newer=modifDate
sel=i+1
if lr<min:
min=lr
elif lr>max:
max=lr
print(str(i+1) + " " + modifDate.strftime("%Y-%m-%d") + ": " + path)
print(" ")
if manual or min!=max: #If manual mode is enabled or if there is a string length diference between different version of plugins
selec=raw_input("Which version do you want to keep?: ["+str(sel)+"] ")
if selec:
selec=int(selec)
else:
selec=sel #Newer is the Default value
else:
selec=1
del(repList[selec-1]) #Delete selected plugin from the list
for path in repList: #Move the rest of the list to the backup folder
print("Deleting: "+ path)
os.renames(path,os.path.join(dirBackup,os.path.basename(path)))
print("-------------------------------------/n/n")
def main():
filePlugins=globRegEx(directory,"^.*$",False,1) #Creates a list with all the files only
dirPlugins=globRegEx(directory,"^.*$",False,2) #Creates a list with all the folders only
#Process files first
for plugin in filePlugins:
m=re.match(r"(.*_)/d.*?/.jar$",plugin) #Creates the glob pattern
if m:
patAux=m.groups()[0]+".*?/.jar$"
find=globRegEx(directory,patAux,True,1)
processRepeated(find)
#Now Directories
for plugin in dirPlugins:
m=re.match(r"(.*_)/d.*$",plugin) #Creates the glob pattern
if m:
patAux=m.groups()[0]+".*$"
find=globRegEx(directory,patAux,True,2)
processRepeated(find)
if __name__=="__main__":
main()
Eclipse le permite volver a cualquier configuración anterior (vaya al menú Ayuda, luego "Actualizaciones de software"). Supongo que Eclipse no eliminará estas versiones antiguas, o esta funcionalidad ya no funcionará.
Si cuando reinicia Eclipse proporciona el argumento "-clean", realiza varias operaciones de limpieza, pero por las razones indicadas anteriormente, no creo que elimine los complementos / características anteriores.
En lugar de ordenar, etc., las soluciones deben basarse en los contenidos de bundles.info
.
Solución manual:
- crea una copia de
eclipse/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info
- editar
- busque la expresión regular:.
.*plugins/([^,]*),.*
, reemplace con:$1
(por ejemplo, utilizando Notepad ++ ) - ir a
eclipse/plugin/
- seleccione los archivos y las carpetas que figuran en este nuevo archivo (por ejemplo, en Total Commander : Marcar> Cargar selección del archivo )
- invertir selección
- eliminar / mover archivos y carpetas seleccionados
La eliminación de complementos antiguos siempre es una molestia. Especialmente cuando actualiza y su Eclipse simplemente no quiere comenzar de nuevo y necesita resolverlo a través de la infinidad de complementos de metadatos.
He visto que algunos de ustedes intentaron arreglar esto a través de un script.
Eclipse Plugin Cleaner
Bueno, he creado una herramienta basada en Java ( con pruebas, compilada por maven y alojada en github, por lo que puedes bifurcarla ) que busca duplicidades de complementos al introspectar archivos manifiestos (o nombres de archivos si el manifiesto está incompleto o dañado) .
Ahora
puede descargar fácilmente el último Eclipse y colocar su antiguo Eclipse en la carpeta dropins/eclipse
y la herramienta limpiará la carpeta dropins, de esta forma se conservarán sus nuevos paquetes y se eliminarán los antiguos (la carpeta dropins
se dropins
para su eliminación si 2 o más versiones iguales se encuentran).
Se puede encontrar más información sobre Eclipse Plugin Cleaner en https://github.com/azachar/eclipse-plugin-cleaner
Modifiqué el script para permitir todos los dropins, las características y los complementos. Primero depende de la ordenación inversa para adivinar la versión del complemento canónico más reciente.
A continuación, reduce ese nombre de versión de complemento calificado a una expresión sed de plugin canónico. Si el complemento es la primera coincidencia para esta expresión, almacena su patrón y lo conserva; de lo contrario, es una versión obsoleta anterior y lo marca para su eliminación.
# scan_old_plugins.sh # script to scan for duplicate old eclipse features, plugins and dropins # generates a "clean-old-plugins.sh" script to clean old versions. # warning: DANGEROUS! review clean-old-plugins script before running it. DropinsDir=dropins FeaturesDir=features PluginsDir=plugins CanonicalPluginsFile=sed_canonical_plugins.sh CleanPluginScriptFile=clean_old_plugins.sh echo "" > $CanonicalPluginsFile echo "" > $CleanPluginScriptFile #for dir in $PluginsDir for dir in $FeaturesDir $PluginsDir $DropinsDir do echo "Processing [$dir] directory..." # file_list=$(/ls -1 $dir | sort -r); echo "$file_list" > $dir-all.txt # for p in $(echo "$file_list") do v=$(echo $p | sed -e ''s/_[0-9/._/-]*/_.*/g'' | sed -e ''s/[0-9][0-9]*/.*/g'') g=$(grep -l "$v" $CanonicalPluginsFile | head -1 | awk ''{print $1}'') if [ "$g" = "" ]; then echo "$p=keep"; echo "$v=$p" >> $CanonicalPluginsFile else echo "$p=stale"; echo "rm -rf $p" >> $CleanPluginScriptFile fi done done
Para deshacerse de los complementos anteriores, debe borrar el historial de instalación. Ve a Ayuda | Acerca de Eclipse | Detalles de instalación | Historial de instalación y seleccione todas las cosas viejas. A continuación, haz clic en eliminar y reiniciar. Voila. Esto funciona con Eclipse Helios (3.6)
También quiero eliminar complementos antiguos, pero todavía no encontré respuesta hoy, así que escribí un guión rápido y sucio, guess-old-eclipse-plugins.sh
para manejar plugins antiguos.
Esta secuencia de comandos escaneará el directorio de complementos en el directorio Eclipse. y generará un archivo remove-old-eclipse-plugins.txt
que se puede usar para eliminar complementos antiguos.
Esta secuencia de comandos se prueba en Cygwin 1.7.15 en Windows XP.
guess-old-eclipse-plugins.sh
PluginsDir=plugins
FeaturesDir=features
PluginIDSeparator=_
RemovingScriptFileName=remove-old-eclipse-plugins.txt
rm -rf $RemovingScriptFileName
#for dir in $PluginsDir $FeaturesDir
for dir in $PluginsDir # $FeaturesDir: most file names in features dir contains more than 1 _ character
do
echo "Processing [$dir] directory..."
# split PluginID from filename
# (not reliable, but general working. (ex: will get one junit PluginID because there''re move than 1 _ characters in file name))
file_list=$(ls $dir);
echo "$file_list" | cut -f1 -d $PluginIDSeparator > $dir-all.txt
echo "$file_list" | cut -f1 -d $PluginIDSeparator | uniq > $dir-uniq.txt
# get the PluginList which VERY POSSIBLY has old versions
diff_result=$(diff -U 0 $dir-uniq.txt $dir-all.txt)
plugins_which_has_old_versions=$(echo "$diff_result" | grep -e "^+[^+]" | cut -f 2 -d +)
#
for p in $(echo "$plugins_which_has_old_versions")
do
echo "$p"
i=0
for f in $(ls -d -t $dir/$p$PluginIDSeparator*) # use ''ls'' command, can sort result by file time, but can not handle file name contains special characters (white space) when using wildcard
#for f in $(find $dir -name "$p$PluginIDSeparator*") # use ''find'' command
do
if [ -d $f ]
then
# should use rm -rf
echo -n "[D]"
else
echo -n " "
fi
echo -n "$f"
((i++))
if [ $i -eq 1 ]
then
echo ""
continue # first file, the newest version
fi
echo " [old]"
echo "rm -rf $f" >> $RemovingScriptFileName
done
echo
done
done
NOTICIA IMPORTANTE
Antes de usar el archivo generado remove-old-eclipse-plugins.txt
para eliminar complementos, asegúrese de que todos los complementos enumerados sean REALMENTE antiguos. Debido a que este script no puede manejar el nombre del archivo contiene más de 1 _
caracteres. Por ejemplo: los complementos JUnit v3 y v4 son 2 complementos diferentes , pero el script lo tratará como los mismos complementos porque estos 2 nombres de archivo usan el mismo prefijo org.junit_
.
org.junit
[D]plugins/org.junit_3.8.2.v3_8_2_v20100427-1100
[D]plugins/org.junit_4.8.2.v4_8_2_v20110321-1705 [old] <-- wrong
Por lo tanto, úselo MUY CUIDADOSAMENTE , elimine la parte incorrecta antes de usarla, o su Eclipse IDE puede no funcionar correctamente.
Muestra de salida
$ ./guess-old-eclipse-plugins.sh
Processing [plugins] directory...
org.eclipse.gef
plugins/org.eclipse.gef_3.7.2.v20111106-2020.jar
plugins/org.eclipse.gef_3.6.2.v20110110-2020.jar [old]
org.eclipse.help.base
plugins/org.eclipse.help.base_3.6.2.v201202080800.jar
plugins/org.eclipse.help.base_3.5.3.v201102101200.jar [old]
org.eclipse.help.ui
plugins/org.eclipse.help.ui_3.5.101.r37_20110819.jar
plugins/org.eclipse.help.ui_3.5.3.r36_20101116.jar [old]
...
Script generado de muestra
rm -rf plugins/org.eclipse.gef_3.6.2.v20110110-2020.jar
rm -rf plugins/org.eclipse.help.base_3.5.3.v201102101200.jar
rm -rf plugins/org.eclipse.help.ui_3.5.3.r36_20101116.jar
rm -rf plugins/org.eclipse.help.webapp_3.5.3.r36_20101130.jar
rm -rf plugins/org.eclipse.jdt.apt.core_3.3.402.R36_v20110120-1000.jar
rm -rf plugins/org.eclipse.jdt.debug.ui_3.5.2.v20100928a_r362.jar