情况:
我们假设我有一个名为mypackage
的软件包。它公开了一个名为Build()
的方法,该方法返回由名为thirdpartypackage
的第三方库公开的具体结构,例如package mypackage
import tpp "github.com/thirdpartycompany/thirdpartypackage"
func Build() *tpp.SharedStruct{
//...implementation
}
。如下所示:
SharedStruct
公开mypackage
的软件包在mypackage
内销售,因为我想分发它并使该软件包独立。
问题:
将thirdpartypackage
导入另一个项目并在我的(集成)测试中使用externalproject_add(zlib
PREFIX .
# download step
GIT_REPOSITORY git@github.com:madler/zlib.git
GIT_TAG v1.2.8
# configure step
SOURCE_DIR zlib
CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/build/zlib/zlib/configure --archs="-arch ${ARCH}" --static
# build step
BUILD_COMMAND make
BUILD_IN_SOURCE 1
# install step
INSTALL_DIR zlib-${ARCH}
INSTALL_COMMAND make install
# logging
LOG_CONFIGURE 1
LOG_BUILD 1
LOG_INSTALL 1
)
后,我收到以下错误:
不能使用XXXX(类型 " github.com/mycompany/mymainproject/vendor/github.com/mycompany/mypackage/vendor/github.com/thirdcompany/thirdpartypackage-go" .Token) 作为类型 " github.com/empatica/mycompany/vendor/github.com/thirdcompany/thirdpartypackage"
基本上,编译器区分我库中的第三方软件包和我放在主项目中的销售软件包。
问题:
有没有办法解决这个问题,那就是不会从我的库中删除已售出的依赖项,比如建议的here?我错过了什么吗?
答案 0 :(得分:2)
我认为你缺少的是这一点:
名为“vendor”的目录下的代码只能由以“vendor”的父目录为根的目录树中的代码导入,并且只能使用省略前缀并包括vendor元素的导入路径。 (go command)
我从您的问题中了解到,您的mypackage
将供应商作为其子项,因此当它被同一级别的任何其他软件包导入时,由于显而易见的原因,他们无法看到该销售列表。
您可以将其理解为与protected
功能类似。
因此,如果您想在任何其他包中使用该版本,那么此vendor
应该出现在同一级别。例如
ParentDirectory
> mypackage
> otherpackage (this will be importing mypackage)
> vendor (vendor should be present in here so that all children under ParentDirectory can access this)
我希望我明白自己的观点。