管理Chocolatey包依赖项

时间:2017-07-19 10:28:16

标签: java dependencies package chocolatey

我是Chocolatey的新手,我安装了zulu作为Oracle Java的替代品(choco install zulu)。 然后我安装了一个需要Java choco install pdfsam.install的应用程序,它安装了Oracle JRE作为依赖项。我认为很聪明,后来我尝试choco uninstall javaruntime。但是我收到了一个错误"因为' pdfsam.install 3.3.2'取决于它。"。

通过阅读命令'帮助,我看到了安装开关--ignore-dependencies和卸载开关--force-dependencies--force 前两个很清楚。所以我可以:

choco uninstall pdfsam.install --force-dependencies
choco install pdfsam.install --ignore-dependencies

关于--force,目前尚不清楚它的用途和使用情况有点气馁:

  

- 力
  强制 - 强制行为。在正常操作期间不要使用强制 - 它会破坏命令的某些智能行为。

这可能意味着卸载一个包,即使另一个包依赖它。 (谁知道?)

我的问题是:

  1. 如果我运行例程choco upgrade all来删除依赖项怎么办?
  2. 我的应用只是一个例子。除了JRE之外,应用程序可能还有其他不可忽略的依赖项。我可以有选择地忽略依赖关系吗?

2 个答案:

答案 0 :(得分:1)

强制卸载依赖项目时,一旦依赖项目更新,将重新安装此依赖项。

例如:

包'foo'取决于包'bar' 你决定安装foo,因此也安装了吧。

现在你可以强制卸载吧,但foo仍然保持安装(choco uninstall bar --force)。 一旦你更新了foo,iff它仍然依赖于bar,bar将再次安装。

示例命令序列:

choco install foo

  • foo和bar安装

choco uninstall bar

  • bar不会卸载并打印消息foo取决于它

choco uninstall bar --force

  • 强制bar卸载(如果foo仍然可以正常工作取决于包,没办法告诉某些未知的包)

choco upgrade foo

  • 这将升级foo(如果存在更新的版本)并确保满足所有依赖关系 - 因此栏将再次安装

我已经将所需的nuspec和此示例的输出放在一起: https://gist.github.com/mwallner/b10bcd6ccd1f7b3d65a56a06c8c8aa0a

关于你的第二个问题,我不知道是否有可能选择性地忽略依赖,也许ferventcoder可以在这里提供帮助。

答案 1 :(得分:1)

首次安装时,您需要使用--ignore-depdendencies(或明确指定的升级),然后启用useRememberedArgumentsForUpgrades功能。然后,当您升级时,它可能会继续忽略依赖项(只要这不是被忽略的交换机之一)。

如果不是您发现的那个被忽略,请在https://github.com/chocolatey/choco/issues/new提交一张票,让我们将其添加为增强功能。