问题描述
我有一个包含多个项目的多根工作区。每个项目都有自己的构建任务,调用外部脚本进行构建。一个项目需要在构建之前构建所有其他项目,因为需要链接它们。从现在开始,我将把它称为“应用程序”项目。
我已尝试在应用程序的 tasks.json 构建配置中使用dependsOn,但如果指定了命令,则引用外部构建任务的名称无效,如果未指定命令,则会引发错误。例如:
{
"label": "build-app","group": "build","dependsOn": [
"devices"
"app",],"dependsOrder": "sequence","problemmatcher": []
}
给出这个错误,即使任务 'devices' 确实存在并且在 devices/tasks.json
文件中工作:
Couldn't resolve dependent task 'devices' in workspace folder 'file:///home/simon/git-repos/workspace/app'
现在这表明它不在当前工作区文件夹之外搜索,所以我尝试在 .code-workspace 文件中创建一个顶级“工作区”任务并在那里引用构建任务:
{
"label": "build-app","problemmatcher": []
}
这会导致类似的错误:
Couldn't resolve dependent task 'devices' in workspace folder 'file:///home/simon/git-repos/workspace/app.code-workspace'
Couldn't resolve dependent task 'app' in workspace folder 'file:///home/simon/git-repos/workspace/app.code-workspace'
现在看起来它不是在 .code-workspace 文件之外搜索。
我可以用一点技巧让它按照我想要的方式工作,但我必须将 app/tasks.json
文件更改目录中的所有任务指定为依赖项目并指定问题匹配器“相对路径”对于每个任务。例如:
{
"type": "shell","label": "devices","command": "cd ${workspaceFolder}/../devices && ./build.py","problemmatcher": {
"base": "$gcc","fileLocation": ["relative","${workspaceRoot}/../devices"]
},},
没关系,因为我现在可以做我想做的事情并创建构建依赖项,但任务定义不在正确的位置。它们都在 app/tasks.json
中,而不是在每个项目自己的 tasks.json
中。似乎逻辑在错误的地方。
我检查了 https://code.visualstudio.com/docs/editor/tasks-appendix 处的 tasks.json 架构,看看是否有您可以在 dependsOn
条目上设置的额外参数,甚至没有提到 dependsOn
或 { {1}}。
有没有办法在单个项目 dependsOrder
文件中配置任务并在另一个项目或顶级工作区配置中的任务的 tasks.json
中引用它们?
在哪里可以找到 tasks.json 文件的完整架构?或者是用来读入这个文件的代码?
西蒙。
解决方法
沿着您的 dependsOn
任务数组,只需添加一个值为 dependsOrder
的 "sequence"
键
以下是官方文档的参考:VSCode - Compound tasks:
如果你指定 "dependsOrder": "sequence" 那么你的任务依赖 按照它们在dependsOn 中列出的顺序执行。任何 使用“dependsOrder”在dependsOn中使用的后台/监视任务: “序列”必须有一个问题匹配器来跟踪它们何时出现 “完成”。
tasks.json
示例:
{
"version": "2.0.0","options": {},"tasks": [
{
"label": "docker-compose-restart","type": "shell","command": "docker-compose down","dependsOrder": "sequence","dependsOn": [
"docker-compose-build","docker-compose-start"
],},{
"label": "docker-compose-build","command": "docker-compose build",{
"label": "docker-compose-start","command": "docker-compose up",]
}