如何对 Java 中的依赖关系图进行排序?

How to Sort a Dependency Graph in Java?

我的任务是处理一个文件中的多个 RPM 包名称,使用 'cascading delete' 选项卸载它们(如果需要),然后以相反的顺序安装。例如,如果有包 abc,其中 c 取决于 bb 取决于 a,卸载顺序应该是c, b, a,安装顺序是a, b, c.

经过一番思考,似乎实现此目的的一种方法是构建依赖图,然后对顶点的度数进行排序。到目前为止,我已经找到了 2 个库,JGraphT and Grph,它们都很有前途,但代码示例少得可怜或根本不存在。前者有org.jgrapht.alg.util.VertexDegreeComparator,后者有grph.algo.sort. OutDegreeSorter。在我深入研究源代码并尝试弄清楚如何使用它们之前,我想知道是否有更好的方法来做到这一点(包括算法和库)?包的数量不会很大(< 100),所以性能不是一个大问题。我将要编写的代码的维护是。

仓促重复呼叫警报:我读过这个thread,但它不是我要找的。楼上的发帖人在问如何建立依赖图,这不是我的问题。

我没有自己构建依赖关系图,而是决定使用 yum 进行本地包安装,如下所示:

PKGS=$(find "$RPM_DIR" -iname "*.rpm" -type f -exec rpm -qp --qf "%{NAME} " {} \; | sed 's/ $//')
RPMS=$(find "$RPM_DIR" -iname "*.rpm" -type f | awk '{print}' ORS=' ')

if [ "$INTERACTIVE" != true ]; then
  sudo yum -y --disablerepo=* remove $PKGS
  sudo yum -y --nogpgcheck localinstall $RPMS
else
  sudo yum --disablerepo=* remove $PKGS
  sudo yum --nogpgcheck localinstall $RPMS
fi