假设我们有以下先决条件:
(quickproject:make-project "lib1")
(quickproject:make-project "lib2")
;;;; Modify lib1/package.lisp like that:
(defpackage #:lib1
(:use #:cl)
(:export #:symbol1))
;;;; Modify lib2/package.lisp like that:
(defpackage #:lib1
(:use #:cl)
(:export #:symbol2))
(quickproject:make-project "project1")
;;;; Edit the project1's asdf:defsystem so that it has the following dependencies:
:depends-on (:lib1 :lib2)
加载 project1 并检查 lib1 包,您会注意到那里有 symbol1 和 symbol2。
影响:
- 不同的依赖会污染其他依赖的包
- 更糟糕的是 - 一个依赖项可以重新定义另一个依赖项的符号定义并破坏系统。
我可能可以通过采用类似于 Java 中使用的包命名约定(具有长分隔名称)来解决我当前的问题。然而,这似乎是一个应该作为一个社区来解决的问题。我们需要一个适用于所有 CL 库的通用解决方案。那会是什么?