How to add local dependency to vendor when using go mod
So, what should I do to add local package to vendor and avoid go mod remove it?
Well, I think you cannot do this. This is not how it works. go mod vendor
manages your vendor folder.
Instead of exclude
ing you package from go.mod you should add a replace
directive to instruct the go tool to look up the package not from privaterepo.com but from the local filesystem. Quoting from https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive
replace also can be used to inform the go tooling of the relative or absolute on-disk location of modules in a multi-module project, such as:
replace example.com/project/foo => ../foo
So in your case: Do not try to manually put privaterepo.com/bb/bb in vendor, but have it somewhere outside the current project and use
replace privaterepo.com/bb/bb => ../bb
And let go mod
copy this stuff from the filesystem to your vendor.
Admin
Updated on July 02, 2022Comments
-
Admin almost 2 years
Before I used
go dep
, but now office ensure the official tool isgo mod
.When I use
go dep
, I can add local dependency packages to vendor andignored
inGopkg.toml
to ignore search the package from repo. I can executego dep update
normally.Now I use
go mod
, I also add local dependence package to vendor and add itexclude
ingo.mod
. But when i executego mod tidy
, it remove the package even though my project existimport xxx
.What did i do:
- create new project
- execute go mod init
modify go.mod
exclude privaterepo.com/bb/bb
copy my local module to vendor because the local module is on a private repo which not support https.
- now the vendor just like:
vendor |-github.com/aa/aa |-privaterepo.com/bb/bb
- import "privaterepo.com/bb/bb"
- execute go build -mod vendor
- than i got error "cannot find module for path privaterepo.com/bb/bb" 9 always try with replace, but it also not work
So, what should I do to add local package to vendor and avoid
go mod
remove it? -
Admin over 5 yearsI had read the modules wiki, and i known i can copy privaterepo.com/bb/bb to outside vendor folder, also if i do this i won't need to add
replace privaterepo.com/bb/bb => ../bb
in the go.mod. But what's the mean ofexclude
, when should i useexclude
? I prefer manager my private repo in vendor just like other public repo. -
Volker over 5 years@yanyandenuonuo
exclude
is for excluding a specific version of a module if you know that this version is broken/doesn't work with our code. IN this case you can mark this version as excluded an go will not select this version during version selection. For the second part: If you manage your build with modules andgo mod
than you must adopt your workflow to go mod. -
Admin over 5 yearsMay be i should ask the question at golang issue. I don't think
exclude
is for excluding a specific version becauserequire
already declare the version. Anyway, thank you so much for your answer. -
Volker over 5 years@yanyandenuonuo exclude is for excluding a single version from the set of possibles and require is to select a single fixed version. Have a second look at the documentation if unsure.
-
Admin over 5 yearsGot it, but i don't think this is right things about
exclude
and i had create a issue about this. Thank you once again.