Создайте и отредактируйте проекты программно

Этот пример показывает, как использовать API Проекта, чтобы создать новый проект и автоматизировать задачи проекта для manipfulating файлов. Это покрывает, как создать проект из командной строки, добавьте файлы и папки, создайте путь к проекту, задайте ярлыки проекта и создайте ссылку на новый проект в другом проекте. Это также показывает, как программно работать с измененными файлами, зависимостями, ярлыками и метками.

Настройте Файлы В качестве примера

Создайте рабочую копию Табличных файлов проекта Приложения "Таймс" в качестве примера и откройте проект. MATLAB® копирует файлы в папку в качестве примера так, чтобы можно было отредактировать их. Проект подвергает файлы системе контроля версий Git™. Используйте currentProject, чтобы создать объект проекта из в настоящее время загруженного проекта.

matlab.project.example.timesTable 
mainProject = currentProject;

Исследуйте файлы проекта

Исследуйте файлы в проекте.

files = mainProject.Files
files = 
  1×14 ProjectFile array with properties:

    Path
    Labels
    Revision
    SourceControlStatus

Используйте индексацию, чтобы получить доступ к файлам в этом списке. Например, получите номер документа 10. Каждый файл имеет свойства, описывающие его путь и присоединенные метки.

mainProject.Files(10)
ans = 
  ProjectFile with properties:

                   Path: "C:\MATLAB\Projects\examples\TimesTableApp1\tests\tNewTimesTable.m"
                 Labels: [1×1 matlab.project.Label]
               Revision: ""
    SourceControlStatus: Unmodified

Исследуйте метки десятого файла.

mainProject.Files(10).Labels
ans = 
  Label with properties:

            File: "C:\MATLAB\Projects\examples\TimesTableApp1\tests\tNewTimesTable.m"
        DataType: 'none'
            Data: []
            Name: "Test"
    CategoryName: "Classification"

Получите конкретный файл по наименованию.

myfile = findFile(mainProject,"source/timestable.mlapp")
myfile = 
  ProjectFile with properties:

                   Path: "C:\MATLAB\Projects\examples\TimesTableApp1\source\timestable.mlapp"
                 Labels: [1×1 matlab.project.Label]
               Revision: ""
    SourceControlStatus: Unmodified

Создайте новый проект

Создайте проект Настольной игры "Таймс". Этот проект сохранит игровую логику устаревшее Табличное Приложение. Проект Настольной игры "Таймс" будет использоваться Табличным проектом Приложения "Таймс" через ссылку проекта.

Создайте проект и установите название проекта.

timesTableGameFolder = fullfile(mainProject.RootFolder,"refs","TimesTableGame");
timesTableGame = matlab.project.createProject(timesTableGameFolder);
timesTableGame.Name = "Times Table Game";

Переместите Табличную игровую логику Приложения "Таймс" от основной папки проекта до папки нового проекта и добавьте его в проект Настольной игры "Таймс". Затем удалите файл из Табличного проекта Приложения "Таймс".

movefile("..\..\source\timesTableGame.m");
addFile(timesTableGame,"timesTableGame.m");

reload(mainProject);
removeFile(mainProject,"source\timesTableGame.m");

Добавьте корневую папку проекта Настольной игры "Таймс" в путь к проекту Настольной игры "Таймс". Это делает файл timesTableGame.m доступным, когда Табличный проект Приложения "Таймс" или любой проект, что ссылки Табличный проект Приложения "Таймс" загружаются.

reload(timesTableGame);
addPath(timesTableGame,timesTableGame.RootFolder);

Добавьте ссылку проекта

Добавьте новый проект Настольной игры Времен в Табличный проект Приложения "Таймс" как ссылка проекта. Это позволяет проекту Приложения Расписания просмотреть, отредактировать, и петлять в Игровом проекте Времени.

reload(mainProject);
addReference(mainProject,timesTableGame);

Получите измененные файлы

Получите все измененные файлы в Табличном проекте Приложения "Таймс". Сравните этот список с представлением Files> Modified в проекте. Вы видите файлы для нового проекта Настольной игры Времен, а также удаленные и измененные файлы в Табличном проекте Приложения "Таймс".

modifiedfiles = listModifiedFiles(mainProject)
modifiedfiles = 
  1×19 ProjectFile array with properties:

    Path
    Labels
    Revision
    SourceControlStatus

Получите второй измененный файл в списке. Заметьте, что свойством SourceControlStatus является Added. Функция listModifiedFiles возвращает любые файлы, которые добавляются, изменяются, конфликтовал, удаленный, и так далее.

modifiedfiles(2)
ans = 
  ProjectFile with properties:

                   Path: "C:\MATLAB\Projects\examples\TimesTableApp1\refs\TimesTableGame\resources\project\Project.xml"
               Revision: ""
    SourceControlStatus: Added

Обновите состояние системы контроля версий прежде, чем запросить отдельные файлы. Вы не должны делать этого прежде, чем вызвать listModifiedFiles.

refreshSourceControl(mainProject)

Получите все файлы проекта, которые являются Unmodified. Используйте функцию ismember, чтобы получить массив logicals утверждение, какие файлы в Табличном проекте Приложения "Таймс" не изменяются. Используйте массив, чтобы получить список неизмененных файлов.

unmodifiedStatus = ismember([mainProject.Files.SourceControlStatus],matlab.sourcecontrol.Status.Unmodified);
mainProject.Files(unmodifiedStatus)
ans = 
  1×9 ProjectFile array with properties:

    Path
    Labels
    Revision
    SourceControlStatus

Получите зависимости от файла

Запустите анализ зависимостей, чтобы обновить известные зависимости между файлами проекта.

updateDependencies(mainProject)

Получите список зависимостей в Табличном проекте Приложения "Таймс". Свойство Dependencies содержит график зависимостей между файлами проекта, хранившими как объект MATLAB digraph.

g = mainProject.Dependencies
g = 
  digraph with properties:

    Edges: [6×1 table]
    Nodes: [10×1 table]

Потребуйте файлов файлом timestable.mlapp.

requiredFiles = bfsearch(g, which('source/timestable.mlapp'))
requiredFiles = 2×1 cell array
    {'C:\MATLAB\Projects\examples\TimesTableApp1\source\timestable.mlapp'             }
    {'C:\MATLAB\Projects\examples\TimesTableApp1\refs\TimesTableGame\timesTableGame.m'}

Получите файлы верхнего уровня всех типов в графике. Функция indegree находит все файлы, которые не зависятся ни от каким другим файлом.

top = g.Nodes.Name(indegree(g)==0)
top = 7×1 cell array
    {'C:\MATLAB\Projects\examples\TimesTableApp1\requirements\TimesTableRequirements.mlx'}
    {'C:\MATLAB\Projects\examples\TimesTableApp1\tests\tAnswerIsCorrect.m'               }
    {'C:\MATLAB\Projects\examples\TimesTableApp1\tests\tCurrentQuestion.m'               }
    {'C:\MATLAB\Projects\examples\TimesTableApp1\tests\tNewTimesTable.m'                 }
    {'C:\MATLAB\Projects\examples\TimesTableApp1\utilities\openRequirementsDocument.m'   }
    {'C:\MATLAB\Projects\examples\TimesTableApp1\utilities\runTheseTests.m'              }
    {'C:\MATLAB\Projects\examples\TimesTableApp1\utilities\runTimesTable.m'              }

Получите файлы верхнего уровня, которые имеют зависимости. Функция indegree находит все файлы, которые не зависятся ни от каким другим файлом, и функция outdegree находит все файлы, которые имеют зависимости.

top = g.Nodes.Name(indegree(g)==0 & outdegree(g)>0)
top = 5×1 cell array
    {'C:\MATLAB\Projects\examples\TimesTableApp1\requirements\TimesTableRequirements.mlx'}
    {'C:\MATLAB\Projects\examples\TimesTableApp1\tests\tAnswerIsCorrect.m'               }
    {'C:\MATLAB\Projects\examples\TimesTableApp1\tests\tCurrentQuestion.m'               }
    {'C:\MATLAB\Projects\examples\TimesTableApp1\tests\tNewTimesTable.m'                 }
    {'C:\MATLAB\Projects\examples\TimesTableApp1\utilities\openRequirementsDocument.m'   }

Найдите повлиявшими (или "в восходящем направлении") файлы путем создания транспонированного графика. Используйте функцию flipedge, чтобы инвертировать направление ребер в графике.

transposed = flipedge(g)
transposed = 
  digraph with properties:

    Edges: [6×1 table]
    Nodes: [10×1 table]

impacted = bfsearch(transposed,which('source/timestable.mlapp'))
impacted = 2×1 cell array
    {'C:\MATLAB\Projects\examples\TimesTableApp1\source\timestable.mlapp'                }
    {'C:\MATLAB\Projects\examples\TimesTableApp1\requirements\TimesTableRequirements.mlx'}

Получите информацию о файлах проекта, таких как количество зависимостей и висячих строк.

averageNumDependencies = mean(outdegree(g));
numberOfOrphans = sum(indegree(g)+outdegree(g)==0);

Измените порядок сортировки диаграммы зависимостей, чтобы показать изменения проекта с самого начала.

ordered = g.Nodes.Name(flip(toposort(g)));

Можно просмотреть тот же график анализа зависимостей в Представлении Влияния проекта. Чтобы построить график, сохраните представление влияния в файл изображения.

Запросите ярлыки

Вы можете использовать ярлыки, чтобы сохранить частые задачи и часто получали доступ к файлам, или автоматизировать задачи запуска и завершения работы.

Получите Табличные ярлыки проекта Приложения "Таймс".

shortcuts = mainProject.Shortcuts
shortcuts = 
  1×4 Shortcut array with properties:

    Name
    Group
    File

Исследуйте ярлык в списке.

shortcuts(2)
ans = 
  Shortcut with properties:

     Name: "Requirements"
    Group: "Documentation"
     File: "C:\MATLAB\Projects\examples\TimesTableApp1\utilities\openRequirementsDocument.m"

Получите путь к файлу ярлыка.

shortcuts(3).File
ans = 
"C:\MATLAB\Projects\examples\TimesTableApp1\utilities\runTheseTests.m"

Исследуйте все файлы в списке ярлыков.

{shortcuts.File}'
ans = 4×1 cell array
    {["C:\MATLAB\Projects\examples\TimesTableApp1\source\timestable.mlapp"             ]}
    {["C:\MATLAB\Projects\examples\TimesTableApp1\utilities\openRequirementsDocument.m"]}
    {["C:\MATLAB\Projects\examples\TimesTableApp1\utilities\runTheseTests.m"           ]}
    {["C:\MATLAB\Projects\examples\TimesTableApp1\utilities\runTimesTable.m"           ]}

Маркируйте файлы

Создайте новую категорию меток типа char. В Табличном проекте Приложения "Таймс" новая категория Engineers появляется в панели Меток.

createCategory(mainProject,'Engineers','char')
ans = 
  Category with properties:

                Name: "Engineers"
        SingleValued: 0
            DataType: "char"
    LabelDefinitions: [1×0 matlab.project.LabelDefinition]

Задайте новую метку в новой категории.

category = findCategory(mainProject,'Engineers');
createLabel(category,'Bob');

Получите объект определения метки для новой метки.

ld = findLabel(category,'Bob')
ld = 
  LabelDefinition with properties:

            Name: "Bob"
    CategoryName: "Engineers"

Присоедините метку к файлу проекта. Если вы выбираете файл в Табличном проекте Приложения "Таймс", вы видите эту метку в Маркировать панели Editor.

myfile = findFile(mainProject,"source/timestable.mlapp");
addLabel(myfile,'Engineers','Bob');

Получите конкретную метку и присоедините текстовые данные к ним.

label = findLabel(myfile,'Engineers','Bob');
label.Data = 'Email: Bob.Smith@company.com'
label = 
  Label with properties:

            File: "C:\MATLAB\Projects\examples\TimesTableApp1\source\timestable.mlapp"
        DataType: 'char'
            Data: 'Email: Bob.Smith@company.com'
            Name: "Bob"
    CategoryName: "Engineers"

Получите данные о метке и сохраните их в переменной.

mydata = label.Data
mydata = 
'Email: Bob.Smith@company.com'

Создайте новую категорию метки с типом данных дважды, тип, который MATLAB обычно использует для числовых данных.

createCategory(mainProject,'Assessors','double');
category = findCategory(mainProject,'Assessors');
createLabel(category,'Sam');

Присоедините новую метку к заданному файлу и присвойте значение данных 2 метке.

myfile = mainProject.Files(10);
addLabel(myfile, 'Assessors', 'Sam', 2)
ans = 
  Label with properties:

            File: "C:\MATLAB\Projects\examples\TimesTableApp1\utilities"
        DataType: 'double'
            Data: 2
            Name: "Sam"
    CategoryName: "Assessors"

Закройте проект

Закройте проект запустить скрипты завершения работы и проверку на несохраненные файлы.

close(mainProject)

Смотрите также

Похожие темы