Ошибки разрешения зависимостей

Ошибка разрешения зависимостей (как лечиться и что означает?)

Модератор: Модераторы разделов

Anyap

Сообщения: 15

Ошибка разрешения зависимостей

Вот вам для примера:

При попытки установки amarok через мененджер пакетов:

Ошибка разрешения зависимостей

Невозможно разрешить зависимость для некоторых выбранных для установки пакетов.

Details
Missing Dependency: libkdesu.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: ruby is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkdnssd.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libknewstuff.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkutils.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libDCOP.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkjs.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkparts.so.2 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkwalletclient.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libruby.so.1.8 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkdecore.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkhtml.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkdeprint.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkio.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkdeui.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Missing Dependency: libkdefx.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)

Через yum

Код: Выделить всё

root@localhost ~]# yum install amarok mplayer xine
Loaded plugins: rhnplugin, security
This system is not registered with RHN.
RHN support will be disabled.
rpmfusion-nonfree-updates-testing                        | 2.8 kB     00:00
5f22a2349c7615764d8ff484a6094e187ab5c289-primary.sqlite. |  12 kB     00:00
rpmfusion-free-updates-testing                           | 2.8 kB     00:00
74125208fb2b917ca0c876c2a5c4bb631a6954e6-primary.sqlite. |  56 kB     00:00
rpmfusion-nonfree-updates                                | 2.8 kB     00:00
f3f522f6ab62acb0c384201dfa38a74d44dd5a41-primary.sqlite. | 1.1 kB     00:00
redhatclub-repository                                    | 1.9 kB     00:00
primary.sqlite.bz2                                       | 179 kB     00:04
rpmfusion-free-updates                                   | 2.8 kB     00:00
763a1aa69ace5e0d4f454974fa42a650ffc03907-primary.sqlite. | 3.0 kB     00:00
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package mplayer.i386 0:1.0-0.101.20080903svn.el5.1 set to be updated
--> Processing Dependency: faad2-libs >= 1:2.6.1 for package: mplayer
--> Processing Dependency: libBasicUsageEnvironment.so.0 for package: mplayer
--> Processing Dependency: libenca.so.0 for package: mplayer
--> Processing Dependency: libfribidi.so.0 for package: mplayer
--> Processing Dependency: libgroupsock.so.0 for package: mplayer
--> Processing Dependency: libdvdnavmini.so.4 for package: mplayer
--> Processing Dependency: libfaad.so.0 for package: mplayer
--> Processing Dependency: libaa.so.1 for package: mplayer
--> Processing Dependency: libliveMedia.so.0 for package: mplayer
--> Processing Dependency: libUsageEnvironment.so.0 for package: mplayer
--> Processing Dependency: liblzo2.so.2 for package: mplayer
--> Processing Dependency: libcaca.so.0 for package: mplayer
--> Processing Dependency: libxvidcore.so.4 for package: mplayer
--> Processing Dependency: libdvdread.so.4 for package: mplayer
--> Processing Dependency: libdca.so.0 for package: mplayer
---> Package amarok.i386 0:1.4.10-4.el5 set to be updated
--> Processing Dependency: libkdeui.so.4 for package: amarok
--> Processing Dependency: libkio.so.4 for package: amarok
--> Processing Dependency: libknewstuff.so.1 for package: amarok
--> Processing Dependency: libkwalletclient.so.1 for package: amarok
--> Processing Dependency: libtunepimp.so.5 for package: amarok
--> Processing Dependency: libkdefx.so.4 for package: amarok
--> Processing Dependency: libkdeprint.so.4 for package: amarok
--> Processing Dependency: libkdnssd.so.1 for package: amarok
--> Processing Dependency: xdg-utils for package: amarok
--> Processing Dependency: ruby for package: amarok
--> Processing Dependency: libkhtml.so.4 for package: amarok
--> Processing Dependency: libmp4v2.so.0 for package: amarok
--> Processing Dependency: libruby.so.1.8 for package: amarok
--> Processing Dependency: libkdesu.so.4 for package: amarok
--> Processing Dependency: libkparts.so.2 for package: amarok
--> Processing Dependency: libkjs.so.1 for package: amarok
--> Processing Dependency: libxine.so.1 for package: amarok
--> Processing Dependency: libkdecore.so.4 for package: amarok
--> Processing Dependency: libDCOP.so.4 for package: amarok
--> Processing Dependency: libkutils.so.1 for package: amarok
---> Package xine.i386 0:0.99.5-6.el5 set to be updated
--> Running transaction check
---> Package amarok.i386 0:1.4.10-4.el5 set to be updated
--> Processing Dependency: libkdeui.so.4 for package: amarok
--> Processing Dependency: libkio.so.4 for package: amarok
--> Processing Dependency: libknewstuff.so.1 for package: amarok
--> Processing Dependency: libkwalletclient.so.1 for package: amarok
--> Processing Dependency: libkdefx.so.4 for package: amarok
--> Processing Dependency: libkdeprint.so.4 for package: amarok
--> Processing Dependency: libkdnssd.so.1 for package: amarok
--> Processing Dependency: ruby for package: amarok
--> Processing Dependency: libkhtml.so.4 for package: amarok
--> Processing Dependency: libruby.so.1.8 for package: amarok
--> Processing Dependency: libkdesu.so.4 for package: amarok
--> Processing Dependency: libkparts.so.2 for package: amarok
--> Processing Dependency: libkjs.so.1 for package: amarok
--> Processing Dependency: libkdecore.so.4 for package: amarok
--> Processing Dependency: libDCOP.so.4 for package: amarok
--> Processing Dependency: libkutils.so.1 for package: amarok
---> Package faad2-libs.i386 1:2.6.1-5.el5 set to be updated
---> Package libdvdread.i386 0:4.1.3-1.el5 set to be updated
---> Package libdca.i386 0:0.0.5-3.el5 set to be updated
---> Package xdg-utils.noarch 0:1.0.2-4.el5 set to be updated
---> Package xine-lib.i386 0:1.1.16.3-2.el5.1 set to be updated
---> Package xvidcore.i386 0:1.1.3-4.el5 set to be updated
---> Package mplayer.i386 0:1.0-0.101.20080903svn.el5.1 set to be updated
--> Processing Dependency: libfribidi.so.0 for package: mplayer
---> Package libtunepimp.i386 0:0.5.3-9.el5 set to be updated
--> Processing Dependency: libofa.so.0 for package: libtunepimp
---> Package live555.i386 0:0-0.20.2008.07.25.el5 set to be updated
---> Package enca.i386 0:1.9-3.el5 set to be updated
---> Package lzo.i386 0:2.02-2.el5.1 set to be updated
---> Package libcaca.i386 0:0.99-0.5.beta16.el5 set to be updated
---> Package libdvdnav.i386 0:4.1.3-1.el5 set to be updated
---> Package aalib.i386 0:1.4.0-0.11.rc5.el5 set to be updated
---> Package libmp4v2.i386 0:1.5.0.1-6.el5 set to be updated
--> Running transaction check
---> Package amarok.i386 0:1.4.10-4.el5 set to be updated
--> Processing Dependency: libkdeui.so.4 for package: amarok
--> Processing Dependency: libkio.so.4 for package: amarok
--> Processing Dependency: libknewstuff.so.1 for package: amarok
--> Processing Dependency: libkwalletclient.so.1 for package: amarok
--> Processing Dependency: libkdefx.so.4 for package: amarok
--> Processing Dependency: libkdeprint.so.4 for package: amarok
--> Processing Dependency: libkdnssd.so.1 for package: amarok
--> Processing Dependency: ruby for package: amarok
--> Processing Dependency: libkhtml.so.4 for package: amarok
--> Processing Dependency: libruby.so.1.8 for package: amarok
--> Processing Dependency: libkdesu.so.4 for package: amarok
--> Processing Dependency: libkparts.so.2 for package: amarok
--> Processing Dependency: libkjs.so.1 for package: amarok
--> Processing Dependency: libkdecore.so.4 for package: amarok
--> Processing Dependency: libDCOP.so.4 for package: amarok
--> Processing Dependency: libkutils.so.1 for package: amarok
---> Package mplayer.i386 0:1.0-0.101.20080903svn.el5.1 set to be updated
--> Processing Dependency: libfribidi.so.0 for package: mplayer
---> Package libofa.i386 0:0.9.3-11.el5 set to be updated
--> Processing Dependency: libfftw3.so.3 for package: libofa
--> Running transaction check
---> Package amarok.i386 0:1.4.10-4.el5 set to be updated
--> Processing Dependency: libkdeui.so.4 for package: amarok
--> Processing Dependency: libkio.so.4 for package: amarok
--> Processing Dependency: libknewstuff.so.1 for package: amarok
--> Processing Dependency: libkwalletclient.so.1 for package: amarok
--> Processing Dependency: libkdefx.so.4 for package: amarok
--> Processing Dependency: libkdeprint.so.4 for package: amarok
--> Processing Dependency: libkdnssd.so.1 for package: amarok
--> Processing Dependency: ruby for package: amarok
--> Processing Dependency: libkhtml.so.4 for package: amarok
--> Processing Dependency: libruby.so.1.8 for package: amarok
--> Processing Dependency: libkdesu.so.4 for package: amarok
--> Processing Dependency: libkparts.so.2 for package: amarok
--> Processing Dependency: libkjs.so.1 for package: amarok
--> Processing Dependency: libkdecore.so.4 for package: amarok
--> Processing Dependency: libDCOP.so.4 for package: amarok
--> Processing Dependency: libkutils.so.1 for package: amarok
---> Package mplayer.i386 0:1.0-0.101.20080903svn.el5.1 set to be updated
--> Processing Dependency: libfribidi.so.0 for package: mplayer
---> Package fftw3.i386 0:3.1.2-5.el5.1 set to be updated
--> Finished Dependency Resolution
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libDCOP.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libknewstuff.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkio.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkwalletclient.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkjs.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkdefx.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkdnssd.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkdeui.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkdecore.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: ruby is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkparts.so.2 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkhtml.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
mplayer-1.0-0.101.20080903svn.el5.1.i386 from rpmfusion-free-updates-testing has depsolving problems
  --> Missing Dependency: libfribidi.so.0 is needed by package mplayer-1.0-0.101.20080903svn.el5.1.i386 (rpmfusion-free-updates-testing)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkdesu.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkdeprint.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libruby.so.1.8 is needed by package amarok-1.4.10-4.el5.i386 (epel)
amarok-1.4.10-4.el5.i386 from epel has depsolving problems
  --> Missing Dependency: libkutils.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkdesu.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: ruby is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libfribidi.so.0 is needed by package mplayer-1.0-0.101.20080903svn.el5.1.i386 (rpmfusion-free-updates-testing)
Error: Missing Dependency: libknewstuff.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkutils.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libDCOP.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkjs.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkparts.so.2 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkwalletclient.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libruby.so.1.8 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkdecore.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkhtml.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkdeui.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkio.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkdeprint.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkdefx.so.4 is needed by package amarok-1.4.10-4.el5.i386 (epel)
Error: Missing Dependency: libkdnssd.so.1 is needed by package amarok-1.4.10-4.el5.i386 (epel)


Red Hat Enterprise Linux 5.3 Server

Платформа: I386

В чем ошибка, что просит от меня мой пингвин? :console:

Anyap

Сообщения: 15

Re: Ошибка разрешения зависимостей

Сообщение

Anyap »

Такая же ошибка при попытке поставить Mplayer

Missing Dependency: libfribidi.so.0 is needed by package mplayer-1.0-0.101.20080903svn.el5.1.i386 (rpmfusion-free-updates-testing)
Missing Dependency: libfribidi.so.0 is needed by package mplayer-gui-1.0-0.101.20080903svn.el5.1.i386 (rpmfusion-free-updates-testing)

sciko

Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Ошибка разрешения зависимостей

Сообщение

sciko »

Anyap писал(а): ↑

22.06.2009 17:51

В чем ошибка, что просит от меня мой пингвин? :console:

Ошибка:

Anyap писал(а): ↑

22.06.2009 17:51

Ошибка разрешения зависимостей

Невозможно разрешить зависимость для некоторых выбранных для установки пакетов.

Конкретно этот дистр не знаю, но предполагаю, что не прописаны какие-то репозитарии.

З.Ы. Интересно, зачем на сервере Амарок?

Anyap

Сообщения: 15

Re: Ошибка разрешения зависимостей

Сообщение

Anyap »

все прописано под завязку

Код: Выделить всё

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
rpm -Uvh http://download1.rpmfusion.org/free/el/updates/testing/5/i386/rpmfusion-free-release-5-0.1.noarch.rpm
rpm -Uvh http://download1.rpmfusion.org/nonfree/el/updates/testing/5/i386/rpmfusion-nonfree-release-5-0.1.noarch.rpm
rpm -Uvh http://repo.redhat-club.org/redhat/5/i386/redhatclub-repository-release-5-4.el5.rhc.noarch.rpm

Top.Mail.Ru

Yodo.im - бот учитель Linux и DevOPS

Загрузка…

Иногда, когда я устанавливаю вещи, я получаю сообщение об ошибке, подобное следующему:

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 package1 : Depends: package2 (>= 1.8) but 1.7.5-1ubuntu1 is to be installed
E: Unable to correct problems, you have held broken packages.

Как я могу решить это?

2012-05-21 14:17

14
ответов

Решение

APT — это система управления пакетами для Debian и других дистрибутивов Linux на ее основе, таких как Ubuntu. По большей части APT прост в использовании для установки, удаления и обновления пакетов. В редких случаях, часто при смешивании сторонних зависимостей, есть вероятность, что apt-get может привести к ошибке, сообщающей, что установка пакета не может быть завершена.

Решения:

Это всегда хорошая идея для резервного копирования файлов конфигурации, таких как /etc/apt/sources.list, так что вы можете отменить изменения, если это необходимо.

  • Если error показывает что-то вроде этого:

    <some-package>: Depends: <other-package> (= version) but this-version is to be installed

    Затем убедитесь, что restricted а также universe репозитории включены. Нажмите Alt + F2, введите software-properties-gtk и нажмите Enter.

    Под Ubuntu Software вкладка, включить все репозитории.

  • One possible cause of unmet dependencies could be corrupted package database, and/or some packages weren’t installed properly. To fix this problem, hit Alt + Ctrl + T to open terminal and try to run one of the following commands:

     sudo apt-get clean 

    или же,

     sudo apt-get autoclean 

    apt-get clean clears out the local repository of retrieved package files (the.deb files). Он удаляет все, кроме файла блокировки, из /var/cache/apt/archives/ и /var/cache/apt/archives/ частичный /. apt-get autoclean clears out the local repository of retrieved package files, but unlike apt-get clean, it only removes package files that can no longer be downloaded, and are largely useless.

  • One of the most basic fixes to resolve dependencies problems is to run:

     sudo apt-get -f установить 

    -f here stands for “fix broken”. Apt will attempt to correct broken dependencies. If you manually installed a package that had unmet dependencies, apt-get will install those dependencies, if possible, otherwise it may simply remove the package that you installed in order to resolve the problem.

    Затем запустите:

     sudo dpkg --configure -a 

    Then run this again:

     sudo apt-get -f установить 

    If the output is:

    0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

    That means it failed.

  • Next solution is to run:

     sudo apt-get -u dist-upgrade 

    If it shows any held packages, it is best to eliminate them. Packages are held because of dependency conflicts that apt cannot resolve. Try this command to find and repair the conflicts:

     sudo apt-get -o Debug::pkgProblemResolver=yes dist-upgrade 

    If it cannot fix the conflicts, it will exit with:

    0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.

    Delete the held packages one by one, running dist-upgrade each time, until there are no more held packages. Then reinstall any needed packages. Be sure to use the --dry-run option, so that you are fully informed of consequences:

    sudo apt-get remove --dry-run имя-пакета 

    Поскольку удаление пакета, который вы пытаетесь установить, может быть не идеальным, вы также можете попытаться найти репозиторий, в котором есть пакеты, необходимые для удовлетворения зависимостей.

Наконец, если ничего не помогает, вы можете попытаться удовлетворить зависимости самостоятельно, либо найдя и установив необходимые пакеты, либо установив их из исходного кода, а затем создав для них пакеты » deb «.

Отключить / удалить / удалить PPA:

PPA (Personal Package Archive) — это репозитории, размещенные на Launchpad. Вы можете использовать PPA для установки или обновления пакетов, которые недоступны в официальных репозиториях Ubuntu.

Одной из наиболее распространенных причин неудовлетворенных зависимостей являются PPA, особенно когда они используются для обновления существующего пакета в репозиториях Ubuntu. Для решения этой проблемы у вас есть три варианта: отключить, очистить (вернуться к исходному пакету в репозиториях Ubuntu) или удалить PPA.

  • Отключение:

    Отключение PPA означает, что больше нет обновлений для пакетов, установленных с этого PPA. Чтобы отключить PPA: Откройте Software Center > Edit > Software Sources Или же,

    Нажмите Alt + F2 и бегите software-properties-gtk,

    Нажмите на Other Software На вкладке вы увидите, что у каждого PPA есть две строки: одна для скомпилированных пакетов и одна для исходного кода, Uncheck обе строки для отключения PPA. Здесь вы также можете добавлять и удалять PPA.

  • Purge:

    Очистка PPA означает понижение пакетов в выбранном PPA до версии в официальных репозиториях Ubuntu и отключение этого PPA. PPA Purge делает именно это. Чтобы установить PPA Purge, выполните следующую команду:

     sudo apt-get установить ppa-purge 

Но, учитывая вопрос apt не работает, приведенная выше команда не будет выполнена. Так что используйте эту команду

mkdir ppa-purge && cd ppa-purge && wget http://mirror.pnl.gov/ubuntu/pool/universe/p/ppa-purge/ppa-purge_0.2.8+bzr56_all.deb && wget http://mirror.pnl.gov/ubuntu//pool/main/a/aptitude/aptitude_0.6.6-1ubuntu1_i386.deb && sudo dpkg -i ./*.deb

Чтобы использовать PPA Purge:

 sudo ppa-purge ppa: someppa / ppa 

Если по какой-либо причине команда «ppa-purge» завершается неудачно, вы не можете снова запустить «ppa-purge», пока не включите PPA (для включения PPA выполните те же шаги, что и для отключения PPA и Check обе строки конкретного PPA, чтобы включить его).

Замечания: PPA Purge не удаляет PPA ( возможно, в будущем), поэтому вам придется вручную удалить PPA.

  • Удалить:

    Если пакет, установленный из PPA, не существует в официальных репозиториях Ubuntu, используйте PPA Purge не рекомендуется, потому что нет ничего, чтобы быть пониженным и PPA Purge не удалил бы это также. Чтобы удалить PPA и установленные пакеты, выполните следующие команды: (Игнорируйте первую команду, если вы не хотите удалять установленные пакеты)

    sudo apt-get autoremove --purge имя-пакета
    sudo add-apt-repository - удалить ppa: someppa / ppa
    sudo apt-get autoclean
    

В качестве альтернативы вы можете использовать Y PPA Manager отключить / удалить / удалить PPA (подробности в конце ответа).

Предупредительные меры:

Итак, как мы можем избежать этого в первую очередь?

  • Держите Ubuntu в курсе. Ubuntu автоматически уведомляет, когда обновления доступны, вы также можете проверить наличие доступных обновлений, нажав на Session Indicator в панели Unity:

    Или нажмите Alt + Ctrl + T, чтобы открыть терминал и выполнить следующие команды:

     sudo apt-get update
    sudo apt-get upgrade 

    Обновление: синхронизирует ваш список доступных пакетов с серверами в исходных репозиториях. Обновление: загружает и устанавливает все новые версии установленных пакетов.

  • Если вы решите добавить другие репозитории в sources.list, убедитесь, что репозиторий предназначен для работы (и известной работы) с Ubuntu. Репозитории, которые не предназначены для работы с вашей версией Ubuntu, могут привести к несоответствиям в вашей системе и могут привести к повторной установке. Кроме того, убедитесь, что вам действительно нужно добавить внешние репозитории, поскольку искомые пакеты программного обеспечения, возможно, уже были добавлены в официальные репозитории! Источник
  • Удалить дубликаты PPA. Y PPA Manager (руководство по установке в конце ответа) может легко сканировать и удалять дубликаты PPA.

    • Нажмите Alt + F2 и бегите y-ppa-manager открыть Y PPA Manager.
    • После открытия дважды щелкните или нажмите Enter на Advanced,
    • В появившемся окне выберите Scan and remove duplicate PPAs и нажмите ОК.

Получать помощь:

При обращении за помощью в Askubuntu или любом другом справочном форуме вы должны включить в свой вопрос вывод следующих команд:

  • Вывод фактической ошибки:

     sudo apt-get установить имя пакета 
  • Это покажет ваш sources.list:

     cat /etc/apt/sources.list 
  • Это покажет список PPA (если есть):

     cat /etc/apt/sources.list.d/* 

Дополнительные источники:

  • ‘apt’ Ubuntu Manpage
  • ‘apt-get’ Ubuntu Manpage
  • ‘apt-get / how-to’ Документация сообщества Ubuntu
  • Документация сообщества Ubuntu ‘Репозитории /Ubuntu’
  • Документация Ubuntu сообщества ‘Repositories/CommandLine’

Y PPA Manager: Y PPA Manager — это универсальный магазин для всех ваших нужд PPA.

Вот некоторые из его особенностей:

  • искать пакеты во всех PPA Launchpad
  • список и загрузка пакетов в PPA
  • добавить / удалить / удалить PPA
  • резервное копирование и восстановление источников PPA
  • удалить дубликаты источников PPA

Установить Y PPA Manager, откройте терминал, нажав Alt + Ctrl + T и выполните следующие команды:

sudo add-apt-repository ppa: webupd8team / y-ppa-manager
sudo apt-get update
sudo apt-get установить y-ppa-manager

Учитывая вопрос, apt не работает, поэтому используйте эти команды вместо

sudo su

а также

32 бит:

mkdir y-ppa-manager && cd y-ppa-manager && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/launchpad-getkeys_0.3.2-1~webupd8~oneiric_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/y-ppa-manager_0.0.8.6-1~webupd8~precise_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/yad_0.17.1.1-1~webupd8~precise_i386.deb && dpkg -i ./*.deb

64 бит:

mkdir y-ppa-manager && cd y-ppa-manager && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/launchpad-getkeys_0.3.2-1~webupd8~oneiric_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/y-ppa-manager_0.0.8.6-1~webupd8~precise_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/yad_0.17.1.1-1~webupd8~precise_amd64.deb && dpkg -i ./*.deb

2012-05-27 07:26

Примечание. Все команды, которые необходимо выполнить, должны быть запущены в терминале, который может быть открыт либо с помощью Ctrl+Alt+T, либо при поиске терминала в тире.

Это действительно сломано?

Попробуйте выполнить следующую команду и попытаться переустановить программное обеспечение, которое вы пытались установить

sudo apt-get update

Предварительные шаги

Резервное копирование

Сделайте резервную копию следующих файлов:

  • /etc/apt/sources.list
  • /var/lib/dpkg/status

Для этого используйте эти команды

sudo cp /etc/apt/sources.list /etc/apt/sources.list.original

а также

sudo cp /var/lib/dpkg/status /var/lib/dpkg/status.original

Очистка вашего apt-кэша

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

Теперь, чтобы очистить его, у вас есть два варианта

sudo apt-get clean 

Это удалит все кэшированные пакеты, принадлежащие папке /var/cache/apt/archives/ а также /var/cache/apt/archives/partial кроме файлов.lock. Это рекомендуется

sudo apt-get autoclean

Это сканирует папки /var/cache/apt/archives/ а также /var/cache/apt/archives/partial и проверяет, находится ли пакет в репозиториях, и удаляет те, которые не


Исправление зависимостей

Использование apt’s fix-broken mode

sudo apt-get -f install

Это заставит apt сканировать отсутствующие зависимости и исправить их из репозиториев.

Если на выходе указано, что ничего нового не было установлено или обновлено, произойдет сбой.


Проверка, включены ли все необходимые источники

Тип gksu software-properties-gtk и вы получите это окно

Убедитесь, что все источники включены.

Затем перейдите на вкладку Другое программное обеспечение и проверьте, есть ли необходимые PPA для устанавливаемого программного обеспечения и включены ли они. Также попробуйте отключить некоторые PPA, которые могут иметь поврежденные пакеты.

сейчас беги sudo apt-get update

Попробуйте установить программное обеспечение сейчас

Выбор лучшего сервера для загрузки с

Тип gksu software-properties-gtk и вы получите это окно

Нажмите «Загрузить» из выпадающего списка и выберите другой

Нажмите Выбрать лучший сервер

Бежать sudo apt-get update

Попробуйте установить программное обеспечение

также попробуйте использовать sudo apt-get install -f


PPA Purge

Это инструмент, используемый для очистки сломанных / нежелательных ppa и их приложений вместе с ним.

Чтобы установить его, запустите

sudo apt-get install ppa-purge

Но, учитывая вопрос apt не работает, поэтому приведенная выше команда не будет выполнена. Так что используйте эту команду

mkdir ppa-purge && cd ppa-purge && wget http://mirror.pnl.gov/ubuntu/pool/universe/p/ppa-purge/ppa-purge_0.2.8+bzr56_all.deb && wget http://mirror.pnl.gov/ubuntu//pool/main/a/aptitude/aptitude_0.6.6-1ubuntu1_i386.deb && sudo dpkg -i ./*.deb

Теперь используйте чистку ppa

sudo ppa-purge ppa:someppa/ppa  

Y-PPA Manager

Y-PPA Manager — это графическое приложение, которое помогает вам управлять PPA и различными проблемами, связанными с ним.

Чтобы установить это

sudo add-apt-repository ppa:webupd8team/y-ppa-manager

а также

sudo apt-get update

а также

sudo apt-get install y-ppa-manager

Учитывая вопрос, apt сломан так, используйте эти команды вместо

sudo su

а также

32 бит:

mkdir y-ppa-manager && cd y-ppa-manager && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/launchpad-getkeys_0.3.2-1~webupd8~oneiric_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/y-ppa-manager_0.0.8.6-1~webupd8~precise_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/yad_0.17.1.1-1~webupd8~precise_i386.deb && dpkg -i ./*.deb

64 бит:

mkdir y-ppa-manager && cd y-ppa-manager && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/launchpad-getkeys_0.3.2-1~webupd8~oneiric_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/y-ppa-manager_0.0.8.6-1~webupd8~precise_all.deb && wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/yad_0.17.1.1-1~webupd8~precise_amd64.deb && dpkg -i ./*.deb

Теперь введите y-ppa-manager

Вам будет представлено это окно

Двойной щелчок на расширенном, и вы получите это окно

Выполните следующие задачи, выделенные черным


Профилактика лучше лечения

Это лучше предотвратить, чем искать этот вопрос на AskUbuntu:D

Итак, вот рекомендации, чтобы держать вас в безопасности

Поддерживайте свою систему в актуальном состоянии

всегда регулярно запускайте следующую команду

sudo apt-get update&&sudo apt-get upgrade

или вы всегда можете использовать диспетчер обновлений с этой командой

gksu update-manager

Использование только доверенных PPA

Используйте только PPA, предназначенные для использования в Ubuntu, используйте только PPA с доверенными источниками. Infact, пакет может быть уже в репозиториях Ubuntu

Резервное копирование, когда все хорошо, и восстановление его позже

Для этого вам нужен Y-PPA-менеджер. Шаги для его установки приведены выше.

Запустите эту команду, чтобы открыть Y-PPA-Manager

y-ppa-manager

Вам будет представлено это окно

Двойной щелчок на расширенном, и вы получите это окно

Запустите это:

Вам будет предложено сохранить файл tar.gz с диалоговым окном, похожим на приведенное ниже. Сохраните его в другом разделе или в безопасном месте

Позже, когда вам нужно будет восстановить его снова, выполните аналогичные шаги, и когда вы перейдете в расширенный диалог, нажмите на это:

Вам будет предложено восстановить из предыдущей резервной копии, которую вы сохранили ранее, в диалоговом окне, похожем на приведенное ниже.


До сих пор не работает?

Ошибки зависимости пакета не всегда являются общими и зависят от устанавливаемого пакета.

Если выполнение всех шагов, указанных для исправления ошибки, не работает, вы всегда можете спросить об этом в Ask Ubuntu

Вот некоторые команды, которые вам нужно опубликовать вывод

sudo apt-get install packagename

а также

cat /etc/apt/sources.list

а также

cat /etc/apt/sources.list.d/*

(Спасибо Basharat Sialvi)

Существуют также другие файлы / команды, для вывода которых вам могут потребоваться ошибки, и пользователи, вероятно, предложат вам в комментариях опубликовать файл / команду.


Amith KK

21 май ’12 в 14:30
2012-05-21 14:30

2012-05-21 14:30

Эти ответы до сих пор сосредоточены на том, как автоматически решить такую ​​проблему, в основном надеясь, что она решится сама, но не на понимание того, как исследовать зависимости. Важно попробовать такие вещи, как проверка того, что ваши списки пакетов обновлены, поскольку вы должны убедиться, что простое обновление или очистка кэша не решит проблему, прежде чем копать глубже. Если все за кадром работает так, как должно, однако, его первостепенное значение имеет научиться понимать зависимости. Иногда уровни зависимостей могут показаться подавляющими, но концепция проста и является ключом к пониманию того, как программное обеспечение устанавливается / удаляется в системе Ubuntu.

Я настоятельно рекомендую aptitude любому, кто использует систему на основе.deb, такую ​​как Ubuntu. Его древовидная структура позволяет легко просматривать зависимости, включая рекомендуемые и предлагаемые пакеты, а также визуализировать конфликты и неудовлетворенные зависимости. Это бесценный инструмент для случаев, когда apt-get не предлагает простого решения, и для визуализации зависимостей в целом. ( Synaptic также доступен в Ubuntu, но я не нахожу его интуитивным.)

Aptitude также предлагает средство разрешения конфликтов, которое проведет вас через все возможные комбинации установленных / удаленных / обновленных / и т.д. пакетов, чтобы удовлетворить все требования без конфликтов или проблем. Это может быть успешным, даже если apt не может найти решение. Как пользователь Ubuntu, обычно не возникает ситуаций, требующих выяснения, почему именно этот пакет устанавливается, но это почти неизбежно, когда вы больше используете систему.

2012-05-30 16:45

package1: Зависит: package2 (>= 1.8), но 1.7.5-1ubuntu1 должен быть установлен

Объяснение сообщения:

  1. Чтобы ваша установка была завершена, package1 нужен package2.
  2. package2 должен быть доступен в версии> = 1.8
  3. Менеджер пакетов проверил все репозитории и нашел только версию 1.7.5-1ubuntu1, которую можно установить, но он этого не сделает, потому что он < 1.8

исправлять

На этот вопрос НЕТ единственно правильного ответа, и НЕТ простого ответа.

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

Сценарий А:

Все репозитории, к которым у вас есть доступ, не имеют package2 в версии>= 1.8, поэтому вам нужно будет найти репозиторий, который имеет. Если вы не можете найти репозиторий с версиями>= 1.8, вам, возможно, придется собрать и установить package2 из исходного кода. А затем попробуйте установить package1.

Если вы хотите узнать, как создать пакет из исходного кода, проверьте другие вопросы / ответы или опубликуйте новый.

Сценарий Б:

В репозитории действительно включен package2 в версии>= 1.8, но менеджер пакетов все еще хочет установить более старую версию (1.7.5).

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

Это может быть невозможно исправить вообще. Вы можете попробовать использовать apt или synaptic и найти все версии пакета 2, которые доступны в репозиториях, и попытаться установить конкретную версию> = 1.8

Если у вас есть другие несовместимые пакеты, и вы делаете это, вы получите список похожих сообщений об ошибках для всех других пакетов, которые препятствуют установке package2>=1.8.

В этом случае у вас есть большая проблема. Вы хотели установить package1, для которого package2 должен быть>= 1.8, но package2 в версии> = 1.8 требует, чтобы package3 был в версии>= 6.7, и у вас package3 версии 6.3

Дело в том, что менеджер пакетов (APT) пытается решить все эти зависимости автоматически, если это возможно. Когда он говорит, что это невозможно (и выдает сообщение, как в вопросе), тогда вы должны доверять этому.

Если вы решите не доверять менеджеру пакетов и уверены, что у вас не возникнет проблем, вы можете попытаться принудительно установить нужные версии всех пакетов по одному и надеяться, что все будет в порядке.

Осторожно, выполнение этого для системных пакетов может создать серьезные проблемы. Вы можете заблокировать себя вне системы, заблокировать важные службы и т. Д.

Сценарий C:

Независимо от причин проблемы, вы всегда можете настроить ручную компиляцию и собрать необходимый пакет и все его зависимости в точных нужных версиях из исходного кода. С помощью этой опции вы можете сохранить то, что вы создали, в отдельном каталоге и вне системного пути, чтобы это не создавало конфликтов с системой. Это, вероятно, самое чистое решение, и иногда его можно сделать быстрее.

Сценарий D:

Менеджер пакетов имеет доступ к устаревшей информации о пакетах и ​​поэтому не может найти решение. Посмотри в других ответах.

Сценарий E:

В менеджере пакетов есть ошибка в коде разрешения зависимостей.

Вы должны выяснить, что это действительно так, а затем выдать запрос об ошибке.

Сценарий Z:

Могут быть и другие сценарии.

Например, сопровождающие пакета могли ошибаться и не проверяли, что package1 будет работать даже с версией package2 < 1.8, и в спецификации они устанавливают неправильные зависимости.

2012-05-30 10:43

В большинстве случаев установка пакета через aptitude разрешит неудовлетворенные зависимости. По умолчанию aptitude пакет не был установлен на вашем ПК. Сначала установите его, запустив,

sudo apt-get update
sudo apt-get install aptitude

затем,

sudo aptitude install packagename

Например,

    
avinash @ avinash-Lenovo-IdeaPad-Z500: ~ $ sudo apt-get install ubuntu-sdk
Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
Некоторые пакеты не могут быть установлены. Это может означать, что у вас есть
запросил невозможную ситуацию или если вы используете нестабильную
рассылка о том, что некоторые необходимые пакеты еще не созданы
или был перемещен из входящих.
Следующая информация может помочь разрешить ситуацию:

Следующие пакеты имеют неудовлетворенные зависимости: Ubuntu-SDK: Зависит: Qtcreator-плагин-Ubuntu, но он не будет установлен
E: Невозможно исправить проблемы, у вас есть сломанные пакеты.

Установка пакета через aptitude

avinash@avinash-Lenovo-IdeaPad-Z500:~$ sudo aptitude install ubuntu-sdk Будут установлены следующие НОВЫЕ пакеты:
  apparmor-easyprof{a} apparmor-easyprof-ubuntu{a} в {a} build-essential{a} 
  click{a} click-apparmor{a} click-dev{a} click-doc{a} cordova-ubuntu-2.8 
  cordova-ubuntu-2.8-examples{a} debhelper{a} devscripts{a} dh-apparmor{a} 
  dh-make{a} distro-info-data{a} dpkg-dev{a} dput{a} g++{a} g++-4.8{a} 
  geoclue-gypsy{a} libalgorithm-diff-perl{a} libalgorithm-diff-xs-perl{a} 
  libalgorithm-merge-perl{a} libboost-filesystem1.53.0{a} 
  libboost-program-options1.53.0{a} libboost-regex1.53.0{a} 
  libbotan-1.10-0{a} libdee-qt5-3{a} libdistro-info-perl{a} 
  libexporter-lite-perl{a} libglib2.0-dev{a} 
  libgstreamer-plugins-base1.0-dev{a} libgstreamer1.0-dev{a} libgypsy0{a} 
  libhud2{a} libio-stringy-perl{a} libjs-jquery{a} libjs-sphinxdoc{a} 
  libjs-underscore{a} liblockdev1{a} libmail-sendmail-perl{a} 
  libparse-debcontrol-perl{a} libpcre3-dev{a} libpcrecpp0{a} 
  libpoppler-qt5-1{a} libqdjango-db0{a} libqgsttools-p1{a} 
  libqt5clucene5{a} libqt5contacts5{a} libqt5declarative5{a} 
  libqt5designer5{a} libqt5designercomponents5{a} libqt5feedback5{a} 
  libqt5help5{a} libqt5locate5 {} }55555555555555555555555555555555555 55 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 из 5 5 5{a} 
  libqt5multimediawidgets5{a} libqt5organizer5{a} 
  libqt5qml-graphicaleffects{a} libqt5script5 libqt5scripttools5{a} 
  libqt5svg5{a} libqt5sev lib -t lib5t5syste libfo5{a} 5k5555555555555555555555 -qmlwebkitplugin{a} libqt5xmlpatterns5{a} 
  libqt5xmlpatterns5-dev libstdC++-4.8-dev{a} libsys-hostname-long-perl{a} 
  libthumbnailer0{a} libu1db-qt5-3{a} libunity-action-qt libupstart-app-launch1{a} 
  libusermetricsinput1 {a} libxml2-dev{a} 
  libxslt1-dev{a} po-debconf{a} python3-apparmor-click{a} python3-click{a} 
  python3-magic{a} qmlscene qt3d5-dev qtbase5-doc{a} qtcreator{a} 
  qtcreator-doc{a} qtcreator-plugin-ubuntu{a} 
  qtcreator-plugin-ubuntu-common{a} qtdeclarative5-account-plugin 
  qtdeclarative5-cordova-2.8-plugin{a} qtdeclarative5-doc-dell-1-элемент-plade-5-элемент-плагин 5-элемент-плагин qtaudioengine-plugin qtdeclarative5-qtmulmedia-plugin{a} 
  qtdeclarative5-qtorganizer-plugin -ui-extras-browser-plugin{a} 
  qtdeclarative5-unity-action-plugin{a} qtdeclarative5-unity-action-plugin{a} qtdeclarative5-ubuntu-ui-extras-browser-plugin-assets {a} -usermetrics0.1 
  qtdeclarative5-window-plugin{a} qtdeclarative5-xmllistmodel-plugin 
  qtgraphicaleffects5-doc{a} qtlocation5-dev{a} qtmultimedia5-dev 
  qtmultimedia5-doc{a} qtmultimedia5-doc} HTML-код5-doc{a} qtscript5-doc-html{a} qtsensors5-dev{a} qtsvg5-doc{a} 
  qtsvg5-doc-html{a} qttools5-dev qttools5-dev-tools qttools5-doc{a} 
  qtwebkit5-doc-html{a} schroot{a} schroot-common{a} sqlite3{a} 
  ubuntu-html5-container ubuntu-html5-sdk{ab} ubuntu-html5-theme{a} 
  ubuntu-html5-theme-examples ubuntu-sdk ubuntu-sdk-libs 
  ubuntu-sdk-libs-dev{a} ubuntu-ui-toolkit-doc{a} 
  ubuntu-ui-toolkit-examples{a} ubuntu-ui-toolkit-theme{a} 
  unity-action-doc{a} upstart-app-launch{a} upstart-app-launch-tools{a} 
  usermetricsservice{a} wdiff{a} zlib1g-dev{a} Будут обновлены следующие пакеты:
  cpp-4.8 gcc-4.8 gcc-4.8-base hud libasan0 libatomic1 libgcc-4.8-dev 
  libgcc1 libglib2.0-0 libglib2.0-bin libgomp1 libitm1 libquadmath0 
  libstdC++6 libtsan0 
15 пакетов обновлено, 151 вновь установлено, 0 для удаления и 293 не обновлено. Необходимо получить 108 МБ /126 МБ архивов. После распаковки будет использовано 273 МБ. Следующие пакеты имеют неудовлетворенные зависимости:
 ubuntu-html5-sdk: Зависит от: qtdeclarative5-ubuntu-webapps-api, который является виртуальным пакетом. Зависит от: ubuntu-html5-ui-toolkit, но не будет установлен. Следующие действия разрешат эти зависимости: оставьте следующие пакеты в их текущей версии:              
1)     qtcreator-plugin-ubuntu [не установлено]                          
2)     ubuntu-html5-sdk [не установлено]                                 
3)     ubuntu-sdk [не установлено] Оставьте следующие неразрешенные зависимости:                       
4)     libhud-client2 рекомендует hud (= 13.10.1+13.10.20131014-0ubuntu1)
5)     qtcreator-plugin-ubuntu-common рекомендует qtcreator-plugin-ubuntu Примите это решение? [Y/n/q/?] Y Будут установлены следующие НОВЫЕ пакеты:
  apparmor-easyprof{a} apparmor-easyprof-ubuntu{a} build-essential{a} 
  click{a} click-apparmor{a} cordova- Ubuntu-2.8 debhelper{a} dh-apparmor{a} 
  dh-make{a} dpkg-dev{a} g++{a} g++-4.8{a} geoclue-gypsy{a} 
  libalgorithm-diff-perl{a} libalgorithm-diff-xs-perl{a} 
  libalgorithm-merge-perl{a} libdee-qt5-3{a} libglib2.0-dev{a} 
  libgstreamer-plugins-base1.0-dev{a} libgstreamer1.0-dev{a} libgypsy0{a} 
  libhud2{a} libjs-jquery{a} libmail-sendmail-perl{a} libpcre3-dev{a} 
  libpcrecpp0{a} libpoppler-qt5-1{a} libqdjango-db0{a} libqgsttools-p1{а} libqt5clucene5 {а} libqt5contacts5 {а} libqt5designer5 {а} libqt5designercomponents5 {а} libqt5feedback5 {а} libqt5help5 {а} libqt5location5-плагинов {а} libqt5multimedia5 {а} libqt5multimedia5-плагинов libqt5multimediaquick-P5 {а} {libqt5multimediawidgets5 a} libqt5organizer5{a} 
  libqt5qml-graphicaleffects{a} libqt5script5 libqt5scripttools5{a} 
  libqt5svg5{a} libqt5svg5-dev libqt5systeminfo5{a} libqt5v8-5-dev 
  libqt5versit5{a} libqt5versitorganizer5{a} libqt5webkit5-dev 
  libqt5webkit5-qmlwebkitplugin{a} libqt5xmlpatterns5{a} 
  libqt5xmlpatterns5-dev libstdC++ - 4.8-dev {a} libsys-hostname-long} {long} {} {}} {} a} libunity-action-qt1{a} 
  libupstart-app-launch1{a} libusermetricsinput1{a} libxml2-dev{a} 
  libxslt1-dev{a} po-debconf{a} python3-apparmor-click{a} python3- нажмите {a} 
  qmlscene qt3d5-dev qtdeclarative5-plug-plugin q -decladeative-5-plugin_degate_dex-5-pluta-plugin_plt-5-pluta_plt-dell-de-de-de-dela-deta-dela-de-dela-de-dela-dell-dell-dell-dell-dell-dell-dell-dell-5-plug-daldecrate-5-plugin_pladestarage-5-loct-daldecrate_5-всплывающий_декларирующий_5-элемент-плагин poppler1.0 
  qtdeclarative5-qtaudioengine-plugin qtdeclarative5-qtfeedback-plugin{a} 
  qtdeclarative5-qtlocation-plugin qtdeclarative5-qtmultimedia-plugin{a} 
  qtdeclarative5-qtorganizer-plugin qqttt0.0 
  qtdeclarative5-ubuntu-ui-extras-browser-plugin{a} 
  qtdeclarative5-ubuntu-ui-extras-browser-plugin gin-assets {a} qtdeclarative5-usermetrics0.1 
  qtdeclarative5-window-plugin{a} qtdeclarative5-xmllistmodel-plugin {loc} qtdeclarative5-user-plugin {a} qtdeclarative5-xmllistmodel-plugin a} qtmultimedia5-dev qtscript5-dev qtsensors5-dev{a} 
  qttools5-dev qttools5-dev-tools sqlite3{a} ubuntu-html5-контейнер ubuntu-html5-theme{a} ubuntu-html5-theme-examples ubuntu-sdk-libs 
  ubuntu-ui-toolkit-theme{a} upstart-app-launch{a} 
  upstart-app-launch-tools{a} usermetricsservice{a} wdiff{a} zlib1g-dev{a} Будут обновлены следующие пакеты:
  cpp-4.8 gcc-4.8 gcc-4.8-base hud libasan0 libatomic1 libgcc-4.8-dev 
  libgcc1 libglib2.0-0 libglib2.0-bin libgomp1 libitm1 libquadmath0 
  libstdC++6 libtsan0 
15 обновленных пакетов, 108 новых установленных, 0 для удаления и 293 не обновлено. Необходимо получить 27,1 МБ /45,8 МБ архивов. После распаковки будет использовано 104 МБ. Вы хотите продолжить? [Y / N /?] 

2013-12-29 16:02

Эти методы должны соблюдаться всякий раз, когда вы получаете ошибку относительно неудовлетворенных зависимостей

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

1 Перед тем, как попробовать любую новую команду или добавить любую новую ppa, попробуйте это

Очистка подходящего кэша:

sudo apt-get clean

Удаление любых неиспользуемых зависимостей:

sudo apt-get autoremove

Обновление apt-кеша

sudo apt-get update

Это удалит весь кеш и загрузит свежий кеш. Это должно быть сделано, чтобы получить новые пакеты кеша и новые обновления.

2 Пытаться sudo apt-get install -f,

Вероятно, он даст некоторые советы по удалению и установке пакетов, и сделайте то, что кажется разумным.

3 Изменить Download Server от Software Sources Потому что иногда файлы на сервере повреждены.

введите описание здесь
введите описание здесь
введите описание здесь

4 Это также происходит, если вы ранее добавили внешний ppa для сломанной зависимости. Попробуйте удалить этот ppa с помощью

  • либо печатать sudo add-apt-repository --remove ppa:someppa/ppa а затем вручную удалить установленные файлы / библиотеки ppa

или же

  • очистка ppa (также удаляет установленные файлы)

    sudo apt-get install ppa-purge   #a one time install 
    sudo ppa-purge ppa:someppa/ppa  
    

5 Если нет 4, это не ваш случай, то, по крайней мере, попытайтесь удалить пакет, который отображается как нарушенная зависимость. Затем попробуйте снова установить. По сообщениям, это работало для довольно многих людей.

6 Всегда добавляйте стабильную версию репозитория / PPA.

введите описание здесь

7 Также убедитесь, что у вас включены все официальные репозитории (в Software Sources)

введите описание здесь

Пожалуйста, не включайте Proposed Updates как они предназначены для тестирования / разработчиков.

введите описание здесь


Как сказал Дуг:

Обычно лучшим первым шагом к решению этой проблемы является определение источника <pkg1> & <pkg2>,

Кроме того, не отмечено, что во многих, если не в большинстве случаев, «<что угодно> должно быть установлено» действительно означает «все, что установлено», и его следует пытаться удалить, если ничего не работает (как в пункте 5).


Я буду продолжать добавлять больше вещей, которые я найду, чтобы исправить unmet dependencies,


Ashu

21 май ’12 в 15:24
2012-05-21 15:24

2012-05-21 15:24

Мой ответ похож на Рик выше.

С помощью apt-get clean, apt-get autoclean, apt-get autoremove, apt-get upgrade, apt-get update, apt-get -u dist-upgradeи т. д. у меня все не получалось.

Я наконец решил эту проблему, спустившись в дерево зависимостей через apt-get install, иллюстрируется примером ниже. В моем случае я хотел установить libmagickwand-dev:

apt-get install libmagickwand-dev

Я получил эту ошибку:

The following packages have unmet dependencies:
 libmagickwand-dev : Depends: libmagickcore4-extra (= 8:6.6.9.7-5ubuntu3.2) but it is not going to be installed
                     Depends: libmagickcore-dev (= 8:6.6.9.7-5ubuntu3.2) but it is not going to be installed

Итак, я побежал apt-get install для одной из неисправных зависимостей:

apt-get install libmagickcore-dev

The following packages have unmet dependencies:
 libmagickcore-dev : Depends: libmagickcore4-extra (= 8:6.6.9.7-5ubuntu3.2) but it is not going to be installed
                     Depends: libgraphviz-dev but it is not going to be installed

Я спустился дальше вниз по дереву:

apt-get install libgraphviz-dev

с другой ошибкой:

The following packages have unmet dependencies:
 libgraphviz-dev : Depends: libgvc5 (= 2.26.3-10ubuntu1) but it is not going to be installed

Еще раз глубже вниз по дереву:

apt-get install libgvc5

По какой-то странной причине это удалось, и я смог установить оригинальный пакет, который хотел apt-get install libmagickwand-dev:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libcdt4 libgd2-xpm libgraph4 libpathplan4
Suggested packages:
  libgd-tools
The following NEW packages will be installed:
  libcdt4 libgd2-xpm libgraph4 libgvc5 libpathplan4
0 upgraded, 5 newly installed, 0 to remove and 2 not upgraded.
Need to get 808 kB of archives.
After this operation, 2,320 kB of additional disk space will be used.
Do you want to continue [Y/n]?

2012-12-20 10:47

Отличные ответы! Но сегодня мой случай кажется отличным от вашего. Вот мой совет.

Проблема:

Я не смог установить apache2 в Ubuntu 10.10.

rick@wen-VirtualBox:~$ sudo apt-get install apache2

Reading package lists... Done

Building dependency tree      

Reading state information... Done

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.

The following information may help to resolve the situation:

The following packages have unmet dependencies:

 apache2 : Depends: apache2-mpm-worker (= 2.2.16-1ubuntu3) but it is not going to be installed or

                    apache2-mpm-prefork (= 2.2.16-1ubuntu3) but it is not going to be installed or

                    apache2-mpm-event (= 2.2.16-1ubuntu3) but it is not going to be installed or

                    apache2-mpm-itk (= 2.2.16-1ubuntu3) but it is not going to be installed

           Depends: apache2.2-common (= 2.2.16-1ubuntu3) but it is not going to be installed

E: Broken packages

Решение:

Мой способ — добавить зависимый пакет в список установки.

Если «sudo apt-get install apache2» не удалось, попробуйте «sudo apt-get install apache2 apache2.2-common«.

Увидеть? apache2.2-common происходит из журнала ошибок предыдущего шага.

Наконец-то я обнаружил, что есть цепочка зависимостей:

 apache2.2-common <-- apache2.2-bin <-- libaprutil1-ldap <-- libaprutil1

Для первых 3 пакетов журнал apt-get сказал мне, что «не будет установлен»,

но для последнего пакета он показывает ‘libaprutil1-ldap: Зависит: libaprutil1 (= 1.3.9+dfsg-3build1), но должен быть установлен 1.3.9+dfsg-3ubuntu0.10.10.1’

У меня есть другая версия в моей библиотеке, поэтому:

sudo apt-get remove libaprutil1

sudo apt-get install apache2

Сейчас все хорошо.


rick

24 ноя ’12 в 15:55
2012-11-24 15:55

2012-11-24 15:55

Что такое неудовлетворенные зависимости Ошибка

В Ubuntu пакеты являются основным способом сборки, развертывания и установки программного обеспечения. Очень просто, пакеты являются альтернативой загрузке, сборке и установке программного обеспечения с нуля. Они предлагают множество преимуществ с точки зрения установки, удаления, мониторинга и обработки взаимодействий между частями программного обеспечения по сравнению со стандартной моделью «сборка из исходного кода».
Ubuntu использует централизованную систему пакетов, т. Е. Каждый пакет зависит от некоторых других пакетов. Когда мы устанавливаем пакет, его зависимости будут установлены. Ошибка неудовлетворенных зависимостей возникает, когда зависимости пакета недоступны для установки.

Возможные причины

1.Computer is not connected to the Internet
2.The repository containing the depandancy package is not enabled
3.Package catalog is not updated
4.The version of the depandancy in the current repository is old
5.Software index is broken
6.The depandancy is not available for ubuntu

Давайте попробуем решить это

  1. Подключиться к интернету:D
  2. Убедитесь, что все репозитории по умолчанию включены

    -> Вы можете легко добавить их в Software Center-> Редактировать-> Программные источники-> Другие источники-> Добавить «

    -> Начать Software Center,

    ->. В панели перейдите к Edit и выберите Software Sources,

    редактировать-софт-источники

    -> Убедитесь, что все репозитории проверенывведите описание здесь

  3. Обновите каталог программного обеспечения

    щелкните по верхнему правому значку и выберите пункт «Доступен для обновления» в меню
    введите описание здесь

и нажмите кнопку проверкивведите описание здесь

4. введите Ctrl+Alt+T, чтобы открыть терминал и введите sudo apt-get install -f

5. Очистите недавно добавленный ppa, используя ppa-purge. Ppa-purge. Установите ppa-purge

Эта программа отключает PPA из ваших источников программного обеспечения и возвращает вашу систему обратно к официальным пакетам Ubuntu. Вы можете использовать это, чтобы вернуть вашу систему в нормальное состояние после тестирования новой версии из PPA.

Синтаксис

sudo ppa-purge ppa:<repository-name>/<subdirectory>

пример

sudo ppa-purge ppa:ubuntu-mozilla-daily/ppa
  1. откройте центр программного обеспечения и попробуйте установить любое программное обеспечение. Если появилось следующее диалоговое окно, нажмите кнопку восстановления и подождите

введите описание здесь

В противном случае введите Ctrl+Alt+T, чтобы открыть терминал и введите sudo apt-get install -f и следуйте инструкциям на экране

Если ошибка по-прежнему возникает, не стесняйтесь спрашивать ее в askbuntu


Tachyons

23 май ’12 в 18:09
2012-05-23 18:09

2012-05-23 18:09

… не забывайте о `build-dep`

В дополнение к этим ответам выше — я должен признать, что я удивлен, что никто не упомянул этот подход, который я всегда использовал как «серебряную пулю» в любое время, когда я сталкивался с конфликтами apt-get или неразрешенными пакетами (или даже если система упряма…. ха!).

ИЗДАНО: используя sudo dpkg -r [package] рекомендуется, так как он имеет довольно мощную функцию удаления. поскольку apt-get работает вместе с dpkg, что значит apt-get будет подчиняться dpkg функция.

  sudo dpkg -r [package]
  sudo apt-get build-dep [package]  
  ## pre-install all deps for the package

Вы вызываете apt-get для очистки сбойного пакета, который пытались установить в системе, а затем вызываете команду build-dep, которая apt-get захватывает и устанавливает зависимости, индивидуально принадлежащие этому пакету, чтобы они удовлетворяли пакет до. Затем, наконец, вызовите apt-get install:

sudo apt-get install [package]

…. «Тьфу! Давайте крутить вашу руку, пока вы не кричите «Дядя!»

Это редко случалось в течение моих долгих лет использования Linux, но я использовал этот подход редко и добился успеха. Это пример недавней борьбы, с которой я столкнулся месяц назад mysql-client/mysql-server, После дюжины неудачных попыток сбросить мой пароль root с помощью mysql-server (даже через —skip-grant-tables techqiue, но пока безуспешно), мне наконец удалось «выкрутить руку Linux, пока она не выкрикнула» Дядя! «»:

sudo dpkg -r mysql-server mysql-client
sudo apt-get autoclean  
## this dumps any copy of existing package to prevent apt-get from "re-using" it.
sudo apt-get build-dep mysql-client   
 ## one package at a time, starting with client first
sudo apt-get install mysql-client
sudo apt-get build-dep mysql-server
sudo apt-get install mysql-server

apt-get autoclean является ключом в этом решении


Faron

21 мар ’15 в 13:51
2015-03-21 13:51

2015-03-21 13:51

Во время установки пакетов i386 в 64-битных системах Multiarch Ubuntu

Если вы пытаетесь установить пакет, который зависит от многих пакетов i386, вышеупомянутая ошибка зависимости также будет вызвана, если вы не сможете добавить архитектуру i386, запустив sudo dpkg --add-architecure i386 команда.

Пример:

avinash@avinash-Lenovo-IdeaPad-Z500:~$ sudo apt-get install skype
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 skype : Depends: skype-bin but it is not installable
E: Unable to correct problems, you have held broken packages.
avinash@avinash-Lenovo-IdeaPad-Z500:~$ sudo dpkg --add-architecture i386
avinash@avinash-Lenovo-IdeaPad-Z500:~$ sudo apt-get install skype
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  gcc-4.8-base:i386 gcc-4.9-base:i386 libasound2:i386 libasound2-plugins:i386
  libasyncns0:i386 libaudio2:i386 libavahi-client3:i386
  libavahi-common-data:i386 libavahi-common3:i386 libc6:i386
  libcgmanager0:i386 libcomerr2:i386 libcups2:i386 libdbus-1-3:i386
  libdbusmenu-qt2:i386 libdrm-intel1:i386 libdrm-nouveau2:i386
  libdrm-radeon1:i386 libdrm2:i386 libelf1:i386 libexpat1:i386 libffi6:i386
  libflac8:i386 libfontconfig1:i386 libfreetype6:i386 libgcc1:i386
  libgcrypt11:i386 libgl1-mesa-dri:i386 libgl1-mesa-glx:i386
  libglapi-mesa:i386 libglib2.0-0:i386 libgnutls26:i386 libgpg-error0:i386
  libgssapi-krb5-2:i386 libgstreamer-plugins-base1.0-0:i386
  libgstreamer1.0-0:i386 libice6:i386 libjack-jackd2-0:i386 libjbig0:i386
  libjpeg-turbo8:i386 libjpeg8:i386 libjson-c2:i386 libk5crypto3:i386
  libkeyutils1:i386 libkrb5-3:i386 libkrb5support0:i386 libllvm3.4:i386
  liblzma5:i386 libmysqlclient18:i386 libnih-dbus1:i386 libnih1:i386
  libogg0:i386 liborc-0.4-0:i386 libp11-kit0:i386 libpciaccess0:i386
  libpcre3:i386 libpng12-0:i386 libpulse0:i386 libqt4-dbus:i386
  libqt4-declarative:i386 libqt4-network:i386 libqt4-opengl:i386
  libqt4-script:i386 libqt4-sql:i386 libqt4-sql-mysql:i386 libqt4-xml:i386
  libqt4-xmlpatterns:i386 libqtcore4:i386 libqtdbus4:i386 libqtgui4:i386
  libqtwebkit4:i386 libsamplerate0:i386 libselinux1:i386 libsm6:i386
  libsndfile1:i386 libspeexdsp1:i386 libsqlite3-0:i386 libssl1.0.0:i386
  libstdc++6:i386 libtasn1-6:i386 libtiff5:i386 libtinfo5:i386
  libtxc-dxtn-s2tc0:i386 libudev1:i386 libuuid1:i386 libvorbis0a:i386
  libvorbisenc2:i386 libwrap0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386
  libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386 libxcb-present0:i386
  libxcb-sync1:i386 libxcb1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386
  libxfixes3:i386 libxi6:i386 libxml2:i386 libxrender1:i386 libxshmfence1:i386
  libxslt1.1:i386 libxss1:i386 libxt6:i386 libxv1:i386 libxxf86vm1:i386
  mysql-common skype-bin:i386 sni-qt:i386 zlib1g:i386
Suggested packages:
  nas:i386 glibc-doc:i386 locales:i386 rng-tools:i386 libglide3:i386
  gnutls-bin:i386 krb5-doc:i386 krb5-user:i386 libvisual-0.4-plugins:i386
  gstreamer-codec-install:i386 gnome-codec-install:i386
  gstreamer1.0-tools:i386 gstreamer1.0-plugins-base:i386 jackd2:i386
  pulseaudio:i386 libqt4-declarative-folderlistmodel:i386
  libqt4-declarative-gestures:i386 libqt4-declarative-particles:i386
  libqt4-declarative-shaders:i386 qt4-qmlviewer:i386 libqt4-dev:i386
  libicu48:i386 libthai0:i386 qt4-qtconfig:i386
Recommended packages:
  xml-core:i386
The following NEW packages will be installed:
  gcc-4.8-base:i386 gcc-4.9-base:i386 libasound2:i386 libasound2-plugins:i386
  libasyncns0:i386 libaudio2:i386 libavahi-client3:i386
  libavahi-common-data:i386 libavahi-common3:i386 libc6:i386
  libcgmanager0:i386 libcomerr2:i386 libcups2:i386 libdbus-1-3:i386
  libdbusmenu-qt2:i386 libdrm-intel1:i386 libdrm-nouveau2:i386
  libdrm-radeon1:i386 libdrm2:i386 libelf1:i386 libexpat1:i386 libffi6:i386
  libflac8:i386 libfontconfig1:i386 libfreetype6:i386 libgcc1:i386
  libgcrypt11:i386 libgl1-mesa-dri:i386 libgl1-mesa-glx:i386
  libglapi-mesa:i386 libglib2.0-0:i386 libgnutls26:i386 libgpg-error0:i386
  libgssapi-krb5-2:i386 libgstreamer-plugins-base1.0-0:i386
  libgstreamer1.0-0:i386 libice6:i386 libjack-jackd2-0:i386 libjbig0:i386
  libjpeg-turbo8:i386 libjpeg8:i386 libjson-c2:i386 libk5crypto3:i386
  libkeyutils1:i386 libkrb5-3:i386 libkrb5support0:i386 libllvm3.4:i386
  liblzma5:i386 libmysqlclient18:i386 libnih-dbus1:i386 libnih1:i386
  libogg0:i386 liborc-0.4-0:i386 libp11-kit0:i386 libpciaccess0:i386
  libpcre3:i386 libpng12-0:i386 libpulse0:i386 libqt4-dbus:i386
  libqt4-declarative:i386 libqt4-network:i386 libqt4-opengl:i386
  libqt4-script:i386 libqt4-sql:i386 libqt4-sql-mysql:i386 libqt4-xml:i386
  libqt4-xmlpatterns:i386 libqtcore4:i386 libqtdbus4:i386 libqtgui4:i386
  libqtwebkit4:i386 libsamplerate0:i386 libselinux1:i386 libsm6:i386
  libsndfile1:i386 libspeexdsp1:i386 libsqlite3-0:i386 libssl1.0.0:i386
  libstdc++6:i386 libtasn1-6:i386 libtiff5:i386 libtinfo5:i386
  libtxc-dxtn-s2tc0:i386 libudev1:i386 libuuid1:i386 libvorbis0a:i386
  libvorbisenc2:i386 libwrap0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386
  libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386 libxcb-present0:i386
  libxcb-sync1:i386 libxcb1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386
  libxfixes3:i386 libxi6:i386 libxml2:i386 libxrender1:i386 libxshmfence1:i386
  libxslt1.1:i386 libxss1:i386 libxt6:i386 libxv1:i386 libxxf86vm1:i386
  mysql-common skype skype-bin:i386 sni-qt:i386 zlib1g:i386
0 upgraded, 115 newly installed, 0 to remove and 7 not upgraded.
Need to get 63.7 MB of archives.
After this operation, 225 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

2014-04-21 07:46

Для меня сработало переустановить зависимость. Это тот случай, когда установленная версия более поздняя, ​​чем последняя (что показывает synaptic). На самом деле это эквивалентно разрешению synaptic понижать пакет зависимостей.

Еще одна вещь, которая работала, это использование «aptitude»:

root@arau:~# aptitude install libgfortran3
The following NEW packages will be installed:
  libgfortran3{b} 
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 250 kB of archives. After unpacking 1 230 kB will be used.
The following packages have unmet dependencies:
 libgfortran3 : Depends: gcc-4.8-base (= 4.8.2-19ubuntu1) but 4.8.4-2ubuntu1~14.04 is installed.
Internal error: found 2 (choice -> promotion) mappings for a single choice.
The following actions will resolve these dependencies:

     Keep the following packages at their current version:
1)     libgfortran3 [Not Installed]                       



Accept this solution? [Y/n/q/?] n
Internal error: found 2 (choice -> promotion) mappings for a single choice.
Internal error: found 2 (choice -> promotion) mappings for a single choice.
The following actions will resolve these dependencies:

      Downgrade the following packages:                                        
1)      cpp-4.8 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]       
2)      gcc-4.8 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]       
3)      gcc-4.8-base [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]  
4)      libasan0 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]      
5)      libatomic1 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]    
6)      libgcc-4.8-dev [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]
7)      libgomp1 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]      
8)      libitm1 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]       
9)      libquadmath0 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]  
10)     libstdc++6 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]    
11)     libtsan0 [4.8.4-2ubuntu1~14.04 (now) -> 4.8.2-19ubuntu1 (trusty)]      

Accept this solution? [Y/n/q/?] y

2015-04-19 20:59

Попробовав почти все методы, упомянутые в этой теме (и другие), я был близок к тому, чтобы сдаться. Я обновил свой Debian Lenny до Squeeze, и я не мог понять, почему PHP5, Apache, MySQL и т. Д. Не хотят устанавливать. В конце концов я попытался использовать

sudo apt-get purge apache2
sudo apt-get purge php5
sudo apt-get purge mysql-server
sudo apt-get clean
sudo apt-get autoremove
sudo apt-get install apache2 php5 mysql-server

..и это работало безупречно! (Осторожно, это может уничтожить ваши конфигурационные файлы, поэтому сделайте их резервную копию!)


h2ooooooo

15 янв ’13 в 10:00
2013-01-15 10:00

2013-01-15 10:00

Если вы получаете сообщение об ошибке, подобное этому:

Это говорит о том, что пакеты уже установлены, но он не установил все остальные пакеты, необходимые для работы. Вы должны быть в состоянии решить это, выполнив это:

sudo apt-get -f install

(Эта команда должна автоматически установить неудовлетворенные зависимости.)

или что-то вроде этого (с соответствующими пакетами):

sudo apt-get install click curl dpkg-dev python-lzma python-requests imagemagick ubuntu-dev-tools

Но если вы в конечном итоге с такой ошибкой: невозможно установить пакет / пакет недоступен / нет кандидата на установку и т.  д.

Затем вы можете найти способы их установки здесь или здесь.
В приведенном выше примере вы сможете найти страницу, подобную этой, а затем использовать PPA или установить .deb для 32-разрядных или .deb для 64-разрядных.


Wilf

02 мар ’14 в 10:44
2014-03-02 10:44

2014-03-02 10:44

ТЕХНОЛОГИЯ ЭКСПЕДИА ГРУПП — ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Дзен и искусство разрешения зависимостей Maven

Практическое руководство по распутыванию проблем с зависимостями Maven

«О, какую запутанную паутину (зависимостей) мы плетем»

Пользователи Maven знают, что одной из наиболее часто используемых и мощных функций является Механизм зависимости. По большей части разрешение различных зависимостей в проекте просто работает без особых сюрпризов, и достаточно просто использовать сам Maven или инструменты, предоставляемые различными IDE, для выявления конфликтов версий. Однако что-то может пойти не так, когда есть взаимозависимые отношения между разными версиями одной и той же зависимости, особенно если новые версии артефакта не имеют обратной совместимости с предыдущими версиями. К сожалению, не все используют семантическое управление версиями должным образом (я смотрю на вас, Avro), поэтому часто недостаточно полагаться на номера версий для выявления проблем несовместимости. Вместо этого может потребоваться проверить содержимое различных артефактов и то, как они используются, чтобы определить причину проблем.

Проблемы, вызванные этими типами проблем с зависимостями, обычно не проявляются во время компиляции в коде, который вы пишете, а вместо этого проявляются в виде исключений и ошибок при фактическом запуске кода, например:

  • Неудачный модульный тест — обычно это лучшее состояние, на которое можно надеяться, поскольку можно быстро и легко опробовать решения, чтобы проверить, работают ли они.
  • Неудачный интеграционный тест — это часто происходит, если интеграционные тесты запускаются как отдельный разветвленный процесс, возможно, с другим путем к классам JVM, на котором выполняются тесты.
  • При удаленном запуске — часто используется другой путь к классам, который содержит дополнительные артефакты, которые могут рассматриваться как «предоставленные» в проекте, над которым вы работаете. Эти ошибки часто возникают неожиданно и запускаются только на определенных путях кода и, как правило, труднее всего решить из-за времени, затрачиваемого на переход от сборки к среде выполнения.

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

Типичные ошибки и исключения

«Хорошо, Хьюстон, у нас тут проблема»

Общие исключения, указывающие на наличие проблемы с разрешением зависимостей, включают (но не ограничиваются) следующее:

  • java.lang.NoSuchMethodError — если ожидаемый метод не может быть найден в пути к классам во время выполнения. Это похоже, но немного отличается от NoSuchMethodException , поскольку метод мог присутствовать во время компиляции, но находился в версии зависимости с ограничением «предоставлено», которая больше не присутствует во время выполнения. Метод может действительно существовать, но типы и / или порядок переданных ему аргументов изменились от версии к версии. Дополнительные сведения см. В подробном сообщении об ошибке.
  • java.lang.NoSuchMethodException — если ожидаемый метод не может быть найден динамически во время выполнения, часто через отражение в каком-то коде, который вы не можете контролировать. Как указано выше, метод может действительно существовать, но типы и / или порядок переданных ему аргументов изменились от версии к версии. Дополнительную информацию см. В подробном сообщении об ошибке.
  • java.lang.NoSuchFieldError — если ожидаемого поля нет в версии зависимости, которая была разрешена.
  • java.lang.ClassNotFoundException — если ожидаемый класс не может быть найден динамически во время выполнения при использовании чего-то вроде Class.forName(). Оскорбительный вызов часто происходит «под капотом» в каком-то другом артефакте, который вы, вероятно, не контролируете, и может относиться к классу, который присутствует в другой версии зависимости.
  • java.lang.NoClassDefFoundError — если ожидаемое определение класса не может быть найдено в пути к классам во время выполнения. Это похоже, но немного отличается от ClassNotFoundException , поскольку класс мог присутствовать во время компиляции, но находился в версии зависимости, ограниченной как «предоставленная», которая отсутствует во время выполнения.
  • Различные другие дочерние классы java.lang.LinkageError — существует много странных и замечательных способов, с помощью которых классы могут изменяться без обратной совместимости, этот родительский класс захватывает большинство из них.

Поиск первопричины

«Потому что любовь к разным версиям — корень всех зол».

Вы можете предпринять ряд действий, чтобы попытаться выяснить, в чем заключается настоящая проблема. В конечном итоге вы ищете класс, который используется во время выполнения, чего не ожидает вызывающий код. Ниже приведены некоторые варианты, которые помогут вам определить, есть ли у вас конфликт версий, откуда загружается проблемный класс и версия зависимости, которая его содержит.

Плагин зависимостей Maven

Первый порт вызова, если вам нравится использовать CLI, — это Maven Dependency Plugin. Это дает ряд полезных целей, но поначалу их использование может показаться непосильным. Определенно стоит прочитать документацию, чтобы понять, что все они делают. Я считаю, что наиболее полезными целями для такого рода проблем являются:

  • dependency: tree — чтобы получить обзор всех зависимостей и их взаимосвязи.
  • dependency: copy-dependencies — чтобы выгрузить все артефакты в папку для дальнейшей проверки.

Инструменты IDE

Многие IDE имеют встроенные функции или плагины, которые предоставляют пользовательский интерфейс в той или иной форме поверх описанного выше Maven Dependency Plugin. В этом разделе рассматривается Eclipse, но многие другие IDE предлагают нечто подобное. Eclipse довольно хорошо предоставляет визуальный и текстовый способ изучения зависимостей в проекте Maven, включая транзитивные зависимости. Как правило, если вы знаете имя зависимости, в которой находится проблемный класс, вы можете сделать следующее:

  1. Щелкните вкладку «иерархия зависимостей».
  2. Введите имя зависимости в поисковый «фильтр» вверху справа.
  3. В представлении иерархии слева теперь будет отображаться Все, что зависит от этого артефакта, и вы обычно можете быстро обнаружить проблемы, если в вашем проекте или в зависимостях восходящего потока (или в обоих) используются совершенно разные версии зависимости.
  4. Представление «Эффективный POM» также может быть полезным, чтобы заставить Maven показать вам, как он объединяет все различные родительские POM и зависимости в один POM, который затем можно сканировать, чтобы увидеть окончательные разрешенные версии всех зависимостей.

На скриншоте ниже показан пример проекта с множественной зависимостью от разных версий Guava:

Не менее четырех различных основных версий Guava — разобраться в них будет очень весело.

Расположение исходного кода

Если вы можете изменить код приложения до того, как возникнет проблема, вы можете попросить загрузчик классов Java сообщить вам полное местоположение того, откуда он загружает проблемный класс, а затем записать это в журнал. Например, если бы мы пытались выяснить, какая версия CoreMatchers class использовалась и откуда она была загружена, мы могли бы сделать это:

System.out.println(CoreMatchers.class.
                   getProtectionDomain().
                   getCodeSource().
                   getLocation());

который, в свою очередь, распечатал бы что-то вроде:

file:/some/path/to/1.9.0/mockito-all-1.9.0.jar

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

Подробный загрузчик классов

Если у вас нет возможности изменить код, как описано выше, но вы можете передавать флаги javacommand, которая запускает приложение, то вы можете запустить загрузчик классов Java в подробном режиме, передав ему аргумент -verbose:class. Затем это будет регистрировать загрузку и выгрузку каждого класса во время выполнения. Обратной стороной этого подхода является то, что у вас будет много выходных журналов, которые нужно будет просмотреть, чтобы найти свою проблему, но разумное использование grep может помочь.

Так, например, если вы запустите команду java следующим образом:

java -verbose:class com.your.package.TestApplication

Затем вы увидите множество выводов в следующих строках:

[Loaded java.security.UnresolvedPermission from /usr/lib/jvm/jre/lib/rt.jar]
[Loaded java.security.BasicPermissionCollection from /usr/lib/jvm/jre/lib/rt.jar]
[Loaded com.expediagroup.dataplatform.TestApplication from file:/path/to/workspace/test-project/target/test-project-0.0.1-SNAPSHOT.jar]

Затем вы можете найти в нем класс, который, как вы подозреваете, вызывает проблему, и точно увидеть, откуда он загружается.

Решения — включить, исключить, переместить или взломать

«Не вините Maven. Найти решение.»

После того, как вы убедились, что основная причина проблемы — несовпадение разных версий зависимости, существует ряд возможных решений. Выбирая свой подход, я рекомендую вам стремиться:

  • Найдите волшебную комбинацию зависимостей и версий, которые совпадают и не конфликтуют. К сожалению, иногда может случиться так, что внесение изменений устраняет первоначальную проблему, но приводит к появлению новой, поэтому может потребоваться изрядное количество проб и ошибок.
  • Будьте явным в отношении нужных вам зависимостей, а не полагайтесь на неявное разрешение транзитивных зависимостей. Явность может сделать ваш файл POM более подробным, но это цена, которую вы платите.
  • Выберите последнюю версию зависимости и внесите все необходимые изменения, чтобы все остальное использовало ее. Использование новейших и лучших версий полезно по ряду причин — безопасность, функции, исправления ошибок и т. Д. получите эти дополнительные преимущества. Конечно, это не всегда возможно, и вам, возможно, придется пойти на компромисс с более ранней версией, особенно если у вас есть другие зависимости вне вашего контроля, которые, в свою очередь, требуют более старых версий проблемной зависимости.
  • Сократите время цикла от внесения изменений до проверки, устраняет ли они проблему. В случаях, когда проблема может быть воспроизведена только при удаленном развертывании, это может означать написание нескольких простых сценариев оболочки для выполнения mvn package, а затем scp артефактов в другом месте. Не переусердствуйте, но время, проведенное здесь, может сэкономить вам много времени, потраченного на выполнение повторяемых вручную шагов.
  • Вносите по одному изменению за раз и проверяйте ситуацию, в которой оно воспроизводится. Если это решит проблему, запустите как можно больше других тестов, чтобы убедиться, что вы случайно не сломали что-то еще.

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

Добавить явную зависимость

Если ваш POM еще не имеет прямой зависимости от проблемной зависимости, вы должны сделать это и явно указать номер версии, а не использовать механизм зависимостей Maven для выбора этого на основе различных переходных конфликтов версий. Это заставит использовать определенную версию и переопределит любые другие переходные версии. Если все остальное работает с этой версией, то все готово. Часто это не так просто, и вам может потребоваться явно изменить версии различных других зависимостей и попытаться выровнять их все так, чтобы они работали с версией, которую вы выбрали. Обратите внимание, что это решение, вероятно, не поможет вам, если у вас есть путь к классам среды выполнения, который содержит версии зависимостей, которые вы не можете контролировать. В этом случае вам может потребоваться использовать затенение и перемещение (обсуждается позже).

Например, чтобы заставить конкретную версию Guava, которую вы могли наследовать как транзитивную зависимость раньше, добавьте прямую зависимость к определенной ее версии в свой POM:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>30.1.1</version>
<dependency>

Исключить проблемные зависимости

Если вы зависите от артефакта, который имеет зависимость от проблемной версии другого артефакта, вы можете исключить эту зависимость и удалить ее с изображения. Помните, что вы можете использовать подстановочные знаки «*» для удаления нескольких артефактов с одинаковым Maven groupId, что может сделать вещи менее подробными.

Например, чтобы исключить проблемную версию Guava, от которой зависит hive-metastore (которое требуется для этого проекта), сделайте что-то вроде этого:

<dependency>
  <groupId>org.apache.hive</groupId>
  <artifactId>hive-metastore</artifactId>
  <version>${hive.version}</version>
  <scope>provided</scope>
  <exclusions>
    <exclusion>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
    </exclusion>
  </exclusions>
</dependency>

Измените версии в восходящих проектах

Если у вас есть контроль над проектами, от которых вы зависите, и которые вызывают проблемы, вы можете внести в них изменения, чтобы использовать версии, которые будут работать ниже по течению. Часто это происходит, когда исходные проекты не обновляются до последних версий с новыми версиями, как ваш собственный проект. Итак, теперь вы можете стать хорошим гидом или бойскаутом и перетащить их в будущее, обновив их, чтобы использовать более новые версии, которые подойдут вам. Конечно, это может привести к всевозможным сопутствующим убыткам в восходящих проектах, которые вам теперь нужно исправить, и ваша проблема теперь выросла. Мне жаль вас, если это так, но утешайте себя, что вы делаете Правильное дело.

Затенение и перемещение проблемных классов

Если исходный проект зависит от версии артефакта, от которого также зависит ваш проект, и вы не можете вносить изменения в исходный проект, то вам следует подумать об использовании Maven Shade Plugin. Это используется для затенения (т.е. включения) и перемещения классов зависимости непосредственно в артефакт вашего проекта. Это делается путем переименования вышестоящих классов (и обновления всего импорта и т. Д.), Чтобы имена классов не конфликтовали с исходными именами. Это позволит вам использовать любую версию зависимости, которую вы хотите, не беспокоясь о других ее версиях, которые могут присутствовать, это особенно полезно, если вы не контролируете путь к классам во время выполнения. Обратите внимание, что если отражение используется для загрузки классов из проблемной зависимости или имена классов передаются через конфигурацию, это может вызвать проблемы — перемещение изменяет имена классов, поэтому эти механизмы потенциально будут неправильно загружать классы из неперемещенной версии зависимости. . Удачи с этим.

В качестве примера, чтобы использовать версию Guava, отличную от той, которая доступна в пути к классам среды выполнения, вы можете затенить и переместить пакеты Guava в файл jar вашего собственного артефакта с новым именем базового пакета с помощью префикса, такого как com.eg.shaded.com.google.* вместо com.google.*. . быть достигнуто так:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>3.1.0</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>        
        <artifactSet>
          <includes>
            <include>com.google.guava:guava</include>
          </includes>
        </artifactSet>
        <relocations>
          <relocation>
            <pattern>com.google</pattern>
            <shadedPattern>com.eg.shaded.com.google</shadedPattern>
          </relocation>
        </relocations>
      </configuration>
    </execution>
  </executions>
</plugin>

Если бы разработчики фреймворков различных сервисов, которые позволяют вам развертывать в них собственный код, понимали, как правильно изолировать пути к классам, вам не пришлось бы прибегать к подобным уловкам. К сожалению, разработчики Hadoop, Hive, Spark и т. Д. Не извлекли уроков из того, как контейнеры J2EE и Java Servlet справились намного за много лет до них.

«Те, кто не может извлечь уроки из истории, обречены повторять ее».

Создание собственной закрашенной и перемещенной версии исходных jar-файлов

Если вы окажетесь в ситуации, когда у вас есть несколько зависимостей восходящего потока (назовем их project-a и project-b), которые, в свою очередь, требуют разных конфликтующих версий такая же зависимость (library-d), и вы не можете изменить project-a или project-b, тогда вы в беде. Если вы используете версию library-d в project-a, тогда project-b генерирует исключение, и наоборот. Мне очень жаль, что до этого дошло, но выход есть. Вам нужно выбрать, какую версию library-d вы предпочитаете сохранить в качестве зависимости (возможно, самую новую версию), и удалить другую версию с изображения. В этом случае предположим, что вы решили сохранить версию project-b. Что вы можете сделать, так это создать модуль / проект Maven, который переупаковывает project-a (назовем это project-a-relocated), а также затеняет и перемещает версию библиотека-д. Это создаст новый артефакт, на который вы можете положиться вместо project-a.

Например, у нас есть project-a, который зависит от версии 11.0.1 Guava:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>11.0.1</version>
</dependency>

и project-b, который зависит от версии 16.0.1:

<dependency>
  <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>16.0.1</version>
</dependency>

и ваш project-c, который зависит от них обоих:

<dependency>
  <groupId>com.expediagroup.dataplatform</groupId>
  <artifactId>project-a</artifactId>
  <version>1.0.0</version>
</dependency>

<dependency>
  <groupId>com.expediagroup.dataplatform</groupId>
  <artifactId>project-b</artifactId>
  <version>1.0.0</version>
</dependency>

Предположим, что теперь вы используете предыдущий совет и добавляете исключения или явные зависимости, чтобы принудительно выбрать Guava 11.0.1, но код из project-b затем не работает, поскольку он не может использовать эту более раннюю версию. Гуавы. Если вместо этого вы принудительно выберете Guava 16.0.1, тогда код из project-a завершится ошибкой, поскольку он не сможет использовать эту более позднюю версию Guava. Итак, что вы можете сделать сейчас, это создать новый проект Maven под названием project-a-relocated, чтобы сохранить все классы project-a «как есть», но переместить его использование Гуавы так:

<artifactId>project-a-relocated</artifactId>
<version>1.0.0</version>
<dependencies>
  <dependency>
    <groupId>com.expediagroup.dataplatform</groupId>
    <artifactId>project-a</artifactId>
    <version>1.0.0</version>
  </dependency>
</dependencies>
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.1.0</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
           <artifactSet>
              <includes>
                <include>com.google.guava:guava</include>
                <include>com.eg.dataplatform:*</include>
              </includes>
            </artifactSet>
            <relocations>
              <relocation>
                <!-- only relocate guava classes -->
                <pattern>com.google</pattern>
                <shadedPattern>
                com.eg.dataplatform.shaded.com.google
                </shadedPattern>
              </relocation>
            </relocations>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

И теперь в вашем проекте вместо того, чтобы зависеть от project-a, вы зависите от вывода вышеуказанного, то есть project-a-relocated:

<dependency>
  <groupId>com.expediagroup.dataplatform</groupId>
  <artifactId>project-a-relocated</artifactId>
  <version>1.0.0</version>
</dependency>

<dependency>
  <groupId>com.expediagroup.dataplatform</groupId>
  <artifactId>project-b</artifactId>
  <version>1.0.0</version>
</dependency>

Теперь у вас будет Guava 16.0.1, используемый project-b, в то время как project-a вместо этого будет использовать затененную и перемещенную версию Guava 11.0.1, которая была фактически удалена. из уравнения. Я никогда не говорил, что это будет кратко или красиво, но я видел эту работу.

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

Измените порядок пути к классам

Если вы не можете внести какие-либо изменения в код или упаковку, существует обходной путь, который может решить проблему. Это своего рода хакерский прием, и он может только отбросить вас по дороге на достаточно долгое время, чтобы вы смогли сбежать и позволить кому-то другому столкнуться с проблемой позже. Если проблему зависимости можно решить, отдав предпочтение только одной версии артефакта по сравнению с другой, и вы можете изменить путь к классам своего приложения, тогда вы сможете внести в него некоторые изменения, чтобы получить эту версию. загружается до (или вместо) любых других. Обычно я бы рекомендовал устранить проблему на более раннем этапе сборки и развертывания, но иногда необходимы такие крайние меры.

Ужасы на примере реального мира

«Мечты разбиваются о камни реальности».

Мы закончим это реальным примером, в котором использовалась большая часть вышеперечисленных советов, с дополнительным сюрпризом из-за ужасающего шоу восходящего проекта, которое затеняет некоторые из его зависимостей , но затем не перемещает их. Когда это происходит, вы можете увидеть исключения, вызванные определенными классами, но вы не будете знать, что они вообще присутствуют, поскольку механизм зависимостей Maven не может их увидеть или сообщить вам. Вместо этого вам придется распаковать и проверить содержимое фактических jar-файлов зависимостей. Присоединяйтесь ко мне сейчас для этой последней печальной истории.

В этом примере у нас есть проект с открытым исходным кодом под названием Beekeeper, в котором есть модуль, который развертывается как приложение Spring Boot. При запуске он выдавал около 200 строк трассировки вложенного стека в файле журнала, но последние три строки указывали на проблему:

Caused by: java.lang.NoSuchMethodError: 'java.lang.String javax.servlet.ServletContext.getVirtualServerName()'
    at org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1178) ~[tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.16.jar:9.0.16]

Таким образом, похоже, что AuthenticatorBase Tomcat не доволен версией класса ServletContext Servlet API. В частности, в нем отсутствует метод getVirtualServerName(). Поэтому мы можем подозревать, что у нас есть разные версии зависимости servlet-api от пути к классам через различные транзитивные зависимости. Первое, что мы ищем, — это наличие нескольких зависимостей servlet-api с разными версиями, чтобы мы могли воспользоваться советом из более ранней версии и добавить некоторые исключения или явные зависимости для определенной версии, чтобы это работало. Итак, мы используем плагин зависимостей Maven, чтобы взглянуть, и вот что происходит:

mvn dependency:tree | grep servlet-api
...
[INFO] |  |  +- javax.servlet:servlet-api:jar:2.5:compile

Какие?!?! Существует только одна версия зависимости servlet-api от пути к классам, так как может возникнуть конфликт версий? Мы могли бы попробовать явно зависеть от другой версии serlvet-api, но их так много, какую из них выбрать? Это много проб и ошибок.

Битва между нами обострилась, теперь мы задаемся вопросом, может ли существовать другая версия класса ServletContext, тайно спрятанная внутри какой-то другой зависимости, чтобы полностью испортить наш день. Давайте посмотрим, скопировав все jar-файлы зависимостей в папку:

mvn dependency:copy-dependencies -DoutputDirectory=target/output

Теперь давайте просканируем все эти jar-файлы на предмет классов с именем ServletContext. Существуют различные визуальные инструменты, которые вы можете использовать для этого, или вы можете использовать некоторую магию bash в следующих строках:

for i in $(find . -name "*.jar"); do jar tvf $i | grep "javax/servlet/ServletContext.class" && echo $i ; done

4974 Mon Feb 04 16:30:46 GMT 2019 javax/servlet/ServletContext.class
./tomcat-embed-core-9.0.16.jar
1429 Wed May 10 14:20:30 BST 2006 javax/servlet/ServletContext.class
./servlet-api-2.5.jar

Подождите, это показывает, что класс ServletContext на самом деле присутствует в двух файлах jar — «servlet-api-2.5.jar» (чего и следовало ожидать) и «tomcat-embed-core-9.0.16.jar» (что на первый взгляд неожиданно). Здесь происходит следующее: Tomcat решил, что он будет только работать с определенной версией зависимости servlet-api. Не сразу понятно, какая версия используется, поскольку они не включили никаких метаданных в свой файл jar (tsk, tsk), но некоторые поиски в Интернете показывают, что это версия 4.0. Чтобы гарантировать использование этой версии, они решили включить классы servlet-api внутри их файла jar, чтобы, если у вас есть какая-либо другая версия servlet-api на пути к классам вы рискуете столкнуться с конфликтом. Это то, что здесь произошло, поскольку версия 2.5 явно старше 4.0 и не имеет прямой или обратной совместимости. Загрузчик классов среды выполнения также решил проявить жестокость и использовать режим упорядочивания классов «сломать все», чтобы поместить старый файл jar servlet-api выше в пути к классам, чтобы он загружался до tomcat-embed-core, который ломает все. Так что мы можем сделать? Если мы снова запустим это

mvn dependency:tree

мы можем посмотреть на иерархию, чтобы увидеть, откуда исходит транзитивная зависимость от версии 2.5 servlet-api (вывод обрезан, чтобы выделить ключевую информацию):

org.apache.hadoop:hadoop-mapreduce-client-core:jar:2.8.1:compile
 +- org.apache.hadoop:hadoop-yarn-common:jar:2.8.1:compile
    +- javax.servlet:servlet-api:jar:2.5:compile

Таким образом, встроенный Tomcat не работает со старой версией 2.5 servlet-api, от которой транзитивно зависит hadoop-mapreduce-client-core. В этом случае нам повезло в том, что то, как мы используем hadoop-mapreduce-client-core, не требует классов servlet-api, поэтому мы можем просто пойти с исключением :

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-mapreduce-client-core</artifactId>
  <version>${hadoop.version}</version>
  <exclusions>
    <exclusion>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
    </exclusion>
  </exclusions>
</dependency>

и мы закончили. Номера версий теперь выровнены, из-за облаков выходит радуга, и приложение снова начинает работать.

В заключение, я надеюсь, что все ваши проблемы с зависимостями будет легко решить, а если нет, то, надеюсь, приведенное выше руководство окажется полезным и избавит вас от боли и страданий.

Я оставлю вам модифицированную версию цитаты Роберта М. Пирсига, чья работа «Дзен и искусство ухода за мотоциклами» послужила основой для названия этой статьи:

«Лучшее место для улучшения взаимозависимостей в мире — сначала в собственном POM, а затем уже оттуда».

а затем неизмененную цитату, которая может помочь вам выстоять перед лицом особенно сложной проблемы разрешения зависимостей:

«Нам просто нужно продолжать, пока мы не выясним, что не так, или не выясним, почему мы не знаем, что не так».

Https://lifeatexpediagroup.com/

Эта проблема возникает при добавлении двух зависимостей, включающих одни и те же классы. И я думаю, что обвиняемый должен быть таким
braintreepayments зависимость, поэтому рекомендую обновить

        implementation 'com.braintreepayments.api:drop-in:3.3.0'

К более новой версии

        implementation 'com.braintreepayments.api:drop-in:5.2.2'

И наверняка вы уже добавили репозиторий mven в файл Gradle вашего проекта.

      repositories {
    maven {
        url "https://cardinalcommerceprod.jfrog.io/artifactory/android"
        credentials {
            username 'braintree_team_sdk'
            password 'AKCp8jQcoDy2hxSWhDAUQKXLDPDx6NYRkqrgFLRc3qDrayg6rrCbJpsKKyMwaykVL8FWusJpp'
        }
    }
}

Для получения дополнительной информации проверьте это:https://github.com/braintree/braintree-android-drop-in

РЕДАКТИРОВАТЬ

Не забудьте установить минимальную версию SDK 21 или выше.

      defaultConfig {
        ...
        minSdkVersion 21
        ...   
    }

и удалите эту строку, если она существует в манифесте

      <uses-sdk android:minSdkVersion="16"/>

Понравилась статья? Поделить с друзьями:
  • Ошибки при эксплуатации акпп
  • Ошибки привели к излишней уплате налога
  • Ошибки разработчиков игр
  • Ошибки регистрации присущи наблюдению
  • Ошибки при экспертизе псд