[英]How to Sort a Dependency Graph in Java?
我已獲得一項任務,可以處理文件中的幾個RPM軟件包名稱,使用“級聯刪除”選項將其卸載(如有必要),然后以相反的順序進行安裝。 例如,如果有程序包a
, b
和c
,其中c
取決於b
而b
取決於a
,則卸載順序應為c, b, a
,安裝順序應為c, b, a
和a, b, c
。
經過一番思考,看來做到這一點的一種方法是建立一個依賴圖,然后對頂點的程度進行排序。 到目前為止,我已經找到了兩個庫JGraphT和Grph ,它們都很有希望,但是它們的代碼樣本很少或根本不存在。 前者具有org.jgrapht.alg.util.VertexDegreeComparator
,而后者具有grph.algo.sort. OutDegreeSorter
grph.algo.sort. OutDegreeSorter
。 在探究源代碼並試圖弄清楚如何使用它們之前,我想知道是否有更好的方法(包括算法和庫)來做到這一點? 軟件包的數量不會很大(<100),因此性能並不是一個大問題。 我要編寫的代碼的維護是。
倉促重復呼叫提醒 :我讀了此線程 ,這不是我想要的。 那里的發布者正在詢問如何構建依賴關系圖,這不是我的問題。
我決定自己使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.