我在写应用程序并导入一些包B
。该软件包有vendor
目录,其中又包含软件包C
。我也想直接在我的应用中使用该包C
。如何在Go包中处理嵌套的“供应商”目录?
所以我决定使用glide
包管理器。它将B
和C
下载到myapp/vendor
目录中,但保留myapp/vendor/B/vendor/C
。因此,当我构建我的应用程序时,它会使用两个不同版本的C构建(也适用于myapp/vendor/C
)。
如何避免这种情况?
1)是否有包管理器来处理? govend
似乎与它的--prune
论点,但它不尊重这些C
包的版本。
2)或者,如何使glide
正确处理嵌套的vendor
目录?
编辑
我的例子是https://github.com/orloffm/flat
。它使用cat
和 - 间接 - toy
包。 cat
有一些旧版本toy
已售卖并已提交到存储库。我做glide create && glide install
以及与此结束:
.
├── flat.go
├── glide.lock
├── glide.yaml
└── vendor
└── github.com
└── orloffm
├── cat
│ ├── cat.go
│ ├── vendor
│ │ └── github.com
│ │ └── orloffm
│ │ └── toy
│ │ └── toy.go
│ └── vendor.yml
└── toy
└── toy.go
我不想嵌套vendor
目录与toy
。
我现在不使用'glide',但是你确定你有最新版本吗?快速浏览一下文档显示''因为这个Glide将依赖关系树平化为一个顶级供应商/目录。“# – JimB
正如JimB所说,我使用的大多数当前的销售工具都会自动将依赖关系树展平。这实际上是必需的,因为从两个不同的唯一路径导入的相同包实际上被视为两个不同的唯一包,就像您发现的那样。我知道'govendor'默认是这样做的。 – Kaedys
@Kaedys +1为govendor。我已经在很多项目中使用过它。 – tier1