如何对 Java 中的依赖关系图进行排序?
How to Sort a Dependency Graph in Java?
我的任务是处理一个文件中的多个 RPM 包名称,使用 'cascading delete' 选项卸载它们(如果需要),然后以相反的顺序安装。例如,如果有包 a
、b
和 c
,其中 c
取决于 b
而 b
取决于 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
我的任务是处理一个文件中的多个 RPM 包名称,使用 'cascading delete' 选项卸载它们(如果需要),然后以相反的顺序安装。例如,如果有包 a
、b
和 c
,其中 c
取决于 b
而 b
取决于 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