这个示例展示了如何使用Project API来创建一个新项目,并自动执行操作文件的项目任务。它涵盖了如何从命令行创建项目、添加文件和文件夹、设置项目路径、定义项目快捷方式,以及在另一个项目中创建对新项目的引用。它还展示了如何以编程方式处理修改过的文件、依赖项、快捷键和标签。
创建泰晤士表应用程序示例项目文件的工作副本,并打开该项目。MATLAB®将文件复制到示例文件夹,以便您可以编辑它们。该项目将这些文件置于Git™源代码控制之下。使用currentProject
从当前加载的项目创建项目对象。
matlab.project.example.timesTable mainProject = currentProject;
检查项目中的文件。
= mainProject文件。文件
文件=1×14对象1×14 ProjectFile数组,带有属性:Path Labels Revision SourceControlStatus
使用索引来访问此列表中的文件。例如,获取文件10。每个文件都有描述其路径和附加标签的属性。
mainProject.Files (10)
“C:\workSpace\examples\TimesTableApp1\tests\tNewTimesTable.”m"标签:[1×1 matlab.project.]修订版本:"51316c67b968d45a17e127003a25143577ec011a" SourceControlStatus:未修改
获取Git最新版本的第十个文件。
mainProject.Files .Revision (10)
ans = " 51316 c67b968d45a17e127003a25143577ec011a "
检查第十档的标签。
mainProject.Files .Labels (10)
文件:"C:\workSpace\examples\TimesTableApp1\tests\tNewTimesTable. "m" DataType: 'none' Data: [] Name: "Test" CategoryName: "Classification"
通过名称获取特定的文件。
myfile = findFile (mainProject,“源/ timestable.mlapp”)
路径:"C:\workSpace\examples\TimesTableApp1\source\timestable. "mlapp"标签:[1×1 matlab.project。修订版本:"51316c67b968d45a17e127003a25143577ec011a" SourceControlStatus:未修改
创建时间表游戏项目。该项目将存储用时表应用程序背后的游戏逻辑。用时表游戏项目将通过项目引用被用时表应用程序项目使用。
创建项目并设置项目名称。
timesTableGameFolder = fullfile (mainProject。RootFolder,“参考文献”,“TimesTableGame”);timesTableGame = matlab.project.createProject (timesTableGameFolder);timesTableGame。Name =“乘法表游戏”;
将用时表应用程序游戏逻辑从主项目文件夹移动到新项目文件夹,并将其添加到用时表游戏项目中。然后,从泰晤士表应用程序项目中删除该文件。
移动文件(“. . \ . . \ \ timesTableGame.m源”);addFile (timesTableGame,“timesTableGame.m”);重载(mainProject);removeFile (mainProject“源\ timesTableGame.m”);
将用时表游戏项目根文件夹添加到用时表游戏项目路径中。这使得timesTableGame.m
当泰晤士表应用项目或任何引用泰晤士表应用项目加载时,文件可用。
重载(timesTableGame);目录(timesTableGame timesTableGame.RootFolder);
将新的用时表游戏项目添加到用时表应用项目中作为项目参考。这允许时间表应用程序项目查看、编辑和运行时间表游戏项目中的文件。
重载(mainProject);addReference (mainProject timesTableGame);
获取Times Table App项目中所有修改过的文件。将这个列表与文件>修改在项目中查看。你可以看到新的泰晤士表游戏项目的文件,以及泰晤士表应用程序项目中删除和修改的文件。
modifiedfiles = listModifiedFiles (mainProject)
modifiedfiles =1×8对象1×8 ProjectFile数组,带有属性:Path Labels Revision SourceControlStatus
获取列表中的第二个修改文件。观察到的SourceControlStatus
属性是添加
.的listModifiedFiles
函数返回添加、修改、冲突、删除等的所有文件。
modifiedfiles (2)
“C:\workSpace\examples\TimesTableApp1\refs\ timestableame \resources\project\ project .xml”Revision:“SourceControlStatus: Added .
在查询单个文件之前刷新源控制状态。您不需要在调用之前这样做listModifiedFiles
.
refreshSourceControl (mainProject)
获取所有的项目文件未修改的
.使用ismember
函数获取一个逻辑数组,该数组表示Times Table App项目中哪些文件未修改。使用数组获取未修改文件的列表。
unmodifiedStatus = ismember ([mainProject.Files.SourceControlStatus], matlab.sourcecontrol.Status.Unmodified);mainProject.Files (unmodifiedStatus)
ans =1×9的对象1×9 ProjectFile数组,带有属性:Path Labels Revision SourceControlStatus
运行依赖关系分析来更新项目文件之间的已知依赖关系。
updateDependencies (mainProject)
获取泰晤士表应用程序项目中的依赖项列表。的依赖关系
属性包含项目文件之间的依赖关系图,存储为MATLAB有向图
对象。
g = mainProject。依赖关系
g = diggraph with properties: Edges: [5×1 table] Nodes: [9×1 table]
获得所需的文件timestable.mlapp
文件。
requiredFiles = bfsearch(g, which(“源/ timestable.mlapp”))
requiredFiles =2×1细胞{“C: \ workSpace \ \ TimesTableApp1 \ \ timestable源例子。mlapp’}{“C: \ workSpace \ \参TimesTableApp1 \ \ TimesTableGame例子\ timesTableGame.m '}
获取图中所有类型的顶级文件。的入度
函数查找不依赖于任何其他文件的所有文件。
顶级= g.Nodes.Name(入度(g) = = 0)
顶级=7×1细胞{“C: \ workSpace \ \ TimesTableApp1 \ \ TimesTableRequirements需求示例。mlx’}{“C: \ workSpace \ \ TimesTableApp1 \ \ tAnswerIsCorrect测试例子。m '}{“C: \ workSpace \ \ TimesTableApp1 \ \ tCurrentQuestion测试例子。m '}{“C: \ workSpace \ \ TimesTableApp1 \ \ tNewTimesTable测试例子。m '}{'C:\workSpace\examples\TimesTableApp1\utilities\editTimesTable.m' } {'C:\workSpace\examples\TimesTableApp1\utilities\openRequirementsDocument.m' } {'C:\workSpace\examples\TimesTableApp1\utilities\runTheseTests.m' }
获取具有依赖项的顶级文件。的入度
函数查找不依赖于任何其他文件的所有文件,并且出度
函数查找所有具有依赖关系的文件。
top = g. nodes . name (indegree(g)==0 & outdegree(g)>0)
顶级=4×1细胞{“C: \ workSpace \ \ TimesTableApp1 \ \ TimesTableRequirements需求示例。mlx’}{“C: \ workSpace \ \ TimesTableApp1 \ \ tAnswerIsCorrect测试例子。m '}{“C: \ workSpace \ \ TimesTableApp1 \ \ tCurrentQuestion测试例子。m '}{“C: \ workSpace \ \ TimesTableApp1 \ \ tNewTimesTable测试例子。m '}
通过创建一个转置的图来查找受影响的(或“上游”)文件。使用flipedge
函数来反转图形中边的方向。
转置= flipedge (g)
转置=有向图属性:Edges: [5×1 table] Nodes: [9×1 table]
影响= bfsearch(转置,(“源/ timestable.mlapp”))
影响=2×1细胞{“C: \ workSpace \ \ TimesTableApp1 \ \ timestable源例子。mlapp’}{“C: \ workSpace \ \ TimesTableApp1 \ \ TimesTableRequirements.mlx需求的例子}
获取有关项目文件的信息,例如依赖项和孤儿项的数量。
averageNumDependencies =意味着(出度(g));numberOfOrphans =总和(入度(g) +出度(g) = = 0);
更改依赖关系图的排序顺序,以自底向上显示项目更改。
命令= g.Nodes.Name(翻转(toposort (g)));
您可以使用快捷方式保存频繁的任务和频繁访问的文件,或自动启动和关闭任务。
获取泰晤士表应用程序项目快捷方式。
快捷键= mainProject。快捷键
快捷键=1×4对象1×4带有属性的快捷数组:名称组文件
检查列表中的快捷方式。
快捷键(2)
名称:"Edit TimesTableApp "组:"Launch Points"文件:"C:\workSpace\examples\TimesTableApp1\utilities\editTimesTable.m"
获取快捷方式的文件路径。
快捷键(3)。文件
ans = " C: \ workSpace \ \ TimesTableApp1例子\工具\ openRequirementsDocument.m”
检查快捷方式列表中的所有文件。
{快捷方式。文件}’
ans =4×1单元阵列{[" C: \ workSpace \ \ TimesTableApp1例子\ \ timestable来源。mlapp "]} {[" C: \ workSpace \ \ TimesTableApp1 \工具\ editTimesTable例子。m”)}{["C:\workSpace\examples\TimesTableApp1\utilities\openRequirementsDocument.m"]} {["C:\workSpace\examples\TimesTableApp1\utilities\runTheseTests.m" ]}
创建一个新的类型标签类别字符
.在泰晤士表应用程序项目中,新的工程师
类别出现在标签窗格。
createCategory (mainProject“工程师”,“字符”)
名称:"Engineers" singlevalue: 0 DataType: "char" LabelDefinitions: [1×0 matlab.project.LabelDefinition]
在新类别中定义一个新标签。
类别= findCategory (mainProject,“工程师”);createLabel(类别,“鲍勃”);
获取新标签的标签定义对象。
ld = findLabel(类别,“鲍勃”)
ld = LabelDefinition with properties:名称:"Bob" CategoryName: "Engineers"
将标签附加到项目文件。如果您选择Times Table App项目中的文件,您可以在标签编辑器窗格。
myfile = findFile (mainProject,“源/ timestable.mlapp”);addLabel (myfile“工程师”,“鲍勃”);
获取一个特定的标签并将文本数据附加到其上。
标签= findLabel (myfile,“工程师”,“鲍勃”);标签。Data =“电子邮件:Bob.Smith@company.com”
C:\workSpace\examples\TimesTableApp1\source\timestable. label =带有属性的标签。mlapp" DataType: 'char' Data: 'Email: Bob.Smith@company.com' Name: "Bob" CategoryName: "Engineers"
检索标签数据并将其存储在一个变量中。
mydata =标签。数据
mydata = 'Email: Bob.Smith@company.com'
用数据类型创建一个新的标签类别双, MATLAB通常用于处理数值数据。
createCategory (mainProject“评估”,“双”);类别= findCategory (mainProject,“评估”);createLabel(类别,“山姆”);
将新标签附加到指定的文件并将数据值2赋给该标签。
myfile = mainProject.Files (10);addLabel (myfile“评估”,“山姆”, 2)
ans = Label with properties: File: "C:\workSpace\examples\TimesTableApp1\utilities" DataType: 'double' Data: 2 Name: "Sam" CategoryName: "Assessors"
关闭项目以运行关闭脚本并检查未保存的文件。
关上(mainProject)