Как удалить старые версии плагинов Eclipse?

После обновления старые плагины Eclipse остаются в папке «plugins» (в папке «features» также есть остатки).

Есть ли способ удалить их автоматически?


person Marko Dumic    schedule 21.10.2008    source источник
comment
О боже. Какой беспорядок. Моя установка eclipse не слишком старая, но уже содержит десятки дублирующих плагинов, некоторые с банками размером 40 МБ. И, судя по всему, Eclipse не всегда использует последнюю версию.   -  person Eric Duminil    schedule 19.01.2021


Ответы (12)


Чтобы избавиться от старых плагинов, вам необходимо очистить историю установки. Перейти к справке | О Затмении | Детали установки | История установки и выберите все старые вещи. Затем нажмите удалить и перезапустить. Вуаля. Это работает с Eclipse Helios (3.6)

person Manfred Hantschel    schedule 08.04.2011
comment
Это не удалило для меня никаких старых плагинов (Eclipse 3.7, даже если потом сделал eclipse -clean). - person Philipp Wendler; 12.04.2012

Я использую следующую команду:

eclipse -application org.eclipse.equinox.p2.garbagecollector.application -profile epp.package.jee

Примечания:

  1. Это описано в Equinox / p2 / FAQ, см. не удаляются ли пакеты при удалении связанной с ними функции? "

    Ответ на часто задаваемые вопросы ссылается на ветку форума сообщества Eclipse "Plug-in jar остается после удаления функции "(июнь 2010 г.) в качестве источника для этого рецепта.

    Рецепт действует и сейчас, с Eclipse 4.8 Photon.

  2. Аргумент -profile зависит от того, какую упаковку Eclipse IDE вы используете. Вышеупомянутый (epp.package.jee) предназначен для «Eclipse для разработчиков Java EE». Нашел в файле configuration/config.ini. Соответствующая строка там следующая:

    eclipse.p2.profile=epp.package.jee
    
person Konstantin Kolinko    schedule 30.09.2018
comment
Многие ответы, за которые проголосовали, очень старые и соответствуют старым временам. Этот намного более современный и работает как шарм. Хотел бы я проголосовать больше. - person Steph; 02.04.2020

Я также хочу удалить старые плагины, но до сих пор не нашел ответа, поэтому написал быстрый и грязный скрипт guess-old-eclipse-plugins.sh для обработки старых плагинов.

Этот скрипт просканирует каталог плагинов в каталоге Eclipse. и создаст remove-old-eclipse-plugins.txt файл, который можно использовать для удаления старых плагинов.

Этот сценарий протестирован под Cygwin 1.7.15 в 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

ВАЖНОЕ ЗАМЕЧАНИЕ

Прежде чем использовать сгенерированный remove-old-eclipse-plugins.txt файл для удаления плагинов, убедитесь, что все перечисленные в нем плагины - ДЕЙСТВИТЕЛЬНО старые плагины. Поскольку этот сценарий не может обрабатывать имя файла, содержащее более 1 _ символов. Например: подключаемые модули JUnit v3 и v4 - это 2 разных подключаемых модуля, но сценарий будет рассматривать их как одинаковые подключаемые модули, поскольку в этих двух именах файлов используется одинаковый префикс org.junit_.

org.junit
[D]plugins/org.junit_3.8.2.v3
$ ./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]
...
2_v20100427-1100 [D]plugins/org.junit_4.8.2.v4
$ ./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]
...
2_v20110321-1705 [old] <-- wrong

Поэтому используйте его ОЧЕНЬ ВНИМАТЕЛЬНО, удалите не ту часть перед использованием, иначе ваша Eclipse IDE может работать некорректно.

Пример вывода

$ ./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]
...

Образец сгенерированного скрипта

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
person LiuYan 刘研    schedule 04.06.2012

Удалить старые плагины всегда сложно. Особенно, когда вы обновляетесь, и ваш Eclipse просто не хочет запускаться снова, и вам нужно выяснить это через ад метаданных зависимостей плагинов.

Я видел, как пара из вас пыталась исправить это с помощью скрипта.

Очиститель подключаемых модулей Eclipse

Что ж, я создал инструмент на основе java (с тестами, созданный maven и размещенный на github, поэтому вы можете его разветвлять), который проверяет дублирование плагинов путем самоанализа файлы манифеста (или имена файлов, если манифест неполный или поврежден).

Теперь

вы можете довольно легко, например, загрузить последнюю версию Eclipse и поместить свой старый Eclipse в папку dropins/eclipse, и инструмент очистит папку dropins - таким образом, ваши новые пакеты сохранятся, а старый удаляется (папка dropins предпочтительнее для удаления, если 2 или найдено больше таких же версий).

Дополнительную информацию о Eclipse Plugin Cleaner можно найти на странице https://github.com/azachar/eclipse-plugin-cleaner.

person Andrej    schedule 04.03.2014

Вместо сортировки и т. Д. Решения должны основываться на содержимом bundles.info.

Ручное решение:

  • создать копию eclipse/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info
  • редактировать
  • искать регулярное выражение: .*plugins/([^,]*),.*, заменить на: $1 (например, используя Блокнот ++)
  • go to eclipse/plugin/
  • выберите файлы и папки, перечисленные в этом новом файле (например, в Total Commander: Отметить> Загрузить выделение из файла)
  • наоборот
  • удалить / переместить выбранные файлы и папки
person Ogmios    schedule 20.11.2015

Я изменил скрипт, чтобы разрешить все выпадения, функции и плагины. Сначала он использует обратную сортировку, чтобы угадать самую последнюю каноническую версию плагина.

Затем он сокращает это квалифицированное имя версии плагина до канонического выражения sed плагина. Если плагин является первым совпадением для этого выражения, он сохраняет свой шаблон и сохраняет его, в противном случае это старая устаревшая версия, и он отмечает ее для удаления.

# 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
person FKorning    schedule 16.07.2013
comment
echo rm -rf $ dir $ p ›› $ CleanPluginScriptFile - person softwarevamp; 23.03.2018

Для меня это работает:

eclipse -application org.eclipse.equinox.p2.garbagecollector.application -profile SDKProfile

Протестировал Eclipse v4.9. Удаляет старую версию моих плагинов. Профиль epp.package.jee, упомянутый в других решениях, возвращает для меня значение «не существует».

person Gion    schedule 24.02.2020

В Ganymede (3.4) правильным способом управления плагинами будет их размещение в папке dropins:

\[eclipse\]/dropins/eclemma1.3.1/eclipse/(plugins|features)

Этот подключаемый модуль будет обнаружен и использован механизмом подготовки p2, но не скопирован в каталоги подключаемых модулей и функций eclipse. Он остается в папке dropins.

Когда вы сбросите eclemma1.3.2, все, что вам нужно сделать, это удалить eclemma1.3.1 из каталога dropins, и старая версия исчезнет.

person VonC    schedule 21.10.2008
comment
У меня есть Aptana, FileSync, AJDT и еще много чего, все они установлены с сайтов обновлений. Все они развернуты в плагины. Единственное, что у меня есть в дропинах, это jadclipse. - person Marko Dumic; 21.10.2008
comment
Хорошо, вы можете попробовать «переместить» эти плагины из eclipse / plugins и eclipse / feature в dropins / FileSync / eclipse / (plugins | features) и dropins / AJDT / eclipse / ... и так далее. И посмотрите, сможете ли вы лучше управлять своими плагинами оттуда. - person VonC; 21.10.2008
comment
Определение правильных версий и перемещение такого количества банок вручную - задача, равная заданному мною вопросу. Кроме того, я бы потерял возможность автоматического обновления. - person Marko Dumic; 21.10.2008
comment
автоматическое обновление должно быть сохранено, поскольку p2 управляет плагинами в папке dropins так же, как он контролирует плагин в eclipse. Что касается перемещения нужных файлов, просто получите новую установку eclipse (не Aptana) и сравните папку кстати. eclipse / ... и Aptana / ...: лишние нужно переместить;) - person VonC; 21.10.2008
comment
Этот у меня тоже не работает. Где бы плагины ни находились, в папке dropins или plugins, после нескольких обновлений старые версии начинают накапливаться (если действительно p2 также управляет dropins). - person Marko Dumic; 21.10.2008
comment
p2 - это управление каталогом dropins, и, по крайней мере, это дает вам только одно место, где вы должны удалить старые плагины. Итак, когда вы говорите начать накапливаться, вы имеете в виду скопление в каталоге dropins? - person VonC; 22.10.2008

Eclipse позволяет вернуться к любой предыдущей конфигурации (перейдите в меню «Справка», затем «Обновления программного обеспечения»). Я предполагаю, что Eclipse не удалит эти старые версии, иначе эта функция больше не будет работать.

Если при перезапуске Eclipse вы указываете аргумент «-clean», он выполняет различные операции очистки, но по причинам, указанным выше, я не думаю, что он удалит старые плагины / функции.

person Dónal    schedule 21.10.2008

Я создал сценарий на python для перемещения старых плагинов в папку резервного копирования, поэтому, если что-то пойдет не так, он может вернуться. У скрипта есть два режима работы: ручной режим спрашивает вас, что делать с каждым обнаруженным дублированным плагином, и автоматический только вопрос в тех случаях, когда длина строки изменилась и, следовательно, могла быть изменена система или нумерация версий.

Я надеюсь, что это помогает кому-то

# -*- 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()
person Bender270    schedule 20.05.2015

Для STM32CubeIDE, популярной IDE на основе Eclipse для семейства микроконтроллеров STM32, эта команда очистила старые версии плагинов под Windows 10:

"C:\ST\STM32CubeIDE_1.3.0\STM32CubeIDE\eclipsec" -application org.eclipse.equinox.p2.garbagecollector.application -profile STM32CubeIDE
person Marcel    schedule 23.08.2020

Самое простое, чистое и эффективное решение - просто удалить текущую установку Eclipse и установить последнюю версию Eclipse (или переустановить текущую версию).

  • Ключевым моментом является установка Eclipse через zip-пакет, а не через установщик или Установить / Обновить.
  • См .: https://www.eclipse.org/downloads/packages/
  • например Eclipse IDE для корпоративных Java-разработчиков и веб-разработчиков: eclipse-java-2021-06-R-win32-x86_64.zip
  • Примечание. Все пользовательские настройки Eclipse сохраняются, потому что они хранятся в вашем рабочем пространстве Eclipse.

Шаги

  • (1) Вручную удалите существующий каталог eclipse, содержащий текущую установку Eclipse.
  • (2) Download the latest Eclipse IDE zip file
  • (3) Разархивируйте последний zip-файл Eclipse IDE в каталог eclipse.
  • (4) Запустите последнюю версию Eclipse IDE.
  • (5) Выберите существующее рабочее пространство Eclipse.
  • (6) Perform the Eclipse workspace migration if prompted
    • Note: Back-up workspace if paranoid (prior to this step)
person Mike Pawlowski    schedule 21.06.2021