Swift Package Manager无法找到KituraNet依赖的问题求助
我想要测试Kitura框架,于是执行了以下命令:
swift package init --type executable
随后编写了最简版Package.swift文件:
import PackageDescription let package = Package( name: "project2", dependencies: [ // Dependencies declare other packages that this package depends on. .package(url: "https://github.com/IBM-Swift/Kitura.git", .upToNextMinor(from: "2.0.0")), .package(url: "https://github.com/IBM-Swift/HeliumLogger.git", .upToNextMinor(from: "1.7.1")), .package(url: "https://github.com/IBM-Swift/Kitura-StencilTemplateEngine", .upToNextMinor(from: "1.8.3")) ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "project2", dependencies: ["Kitura", "HeliumLogger", "KituraStencil"]), ] )
执行swift build命令时出现如下错误:
'Kitura' /Users/myname/Documents/myname/project2/.build/checkouts/Kitura.git-6522211175291160341: error: product dependency 'KituraNet' not found
我在公司的台式机上执行完全相同的操作却一切正常,请问我遗漏了什么?
这问题我之前调试Kitura项目时也碰到过,大概率是本地环境和公司机器的差异导致的,咱们一步步排查解决:
检查Swift版本一致性
Swift Package Manager(SPM)在不同Swift版本下的依赖解析逻辑可能有差异,Kitura 2.x对Swift版本有明确要求(比如Swift 4.0及以上,部分子版本还需要更高版本)。先在公司机器和本地分别执行:swift --version如果版本不一致,建议切换到和公司相同的Swift版本(可以用
swiftenv这类工具管理多版本Swift),再重新尝试构建。清理并重新拉取依赖
本地的SPM缓存可能存在损坏或者旧版本依赖残留,导致Kitura的核心子依赖KituraNet没有正确拉取。执行以下步骤:- 删除本地构建目录:
rm -rf .build - 清理构建产物:
swift package clean - 强制更新所有依赖:
swift package update - 重新解析并构建:
swift build
- 删除本地构建目录:
锁定依赖版本
虽然你指定了.upToNextMinor(from: "2.0.0"),但不同环境下SPM可能拉取到不同的Kitura小版本,某些版本的依赖声明可能有变动。可以尝试指定一个和公司机器一致的具体版本,比如:.package(url: "https://github.com/IBM-Swift/Kitura.git", .exact("2.9.0"))替换后再重新执行
swift package update和swift build。排查网络完整性
有时候网络波动会导致依赖拉取不完整,KituraNet作为Kitura的子依赖如果拉取失败就会触发这个错误。可以尝试重新执行依赖解析命令:swift package resolve确保过程中没有网络错误提示。
内容的提问来源于stack exchange,提问作者user4807763

