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

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

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

Создайте рабочую копию Табличных файлов проекта Приложения "Таймс" в качестве примера и откройте проект. 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:\workSpace\examples\TimesTableApp\tests\tNewTimesTable.m"
                 Labels: [1×1 matlab.project.Label]
               Revision: ""
    SourceControlStatus: Unmodified

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

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

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

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

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

                   Path: "C:\workSpace\examples\TimesTableApp\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:\workSpace\examples\TimesTableApp\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 свойство содержит график зависимостей между файлами проекта, хранившими как digraph MATLAB объект.

g = mainProject.Dependencies
g = 
  digraph with properties:

    Edges: [5×1 table]
    Nodes: [9×1 table]

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

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

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

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

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

top = g.Nodes.Name(indegree(g)==0 & outdegree(g)>0)
top = 4×1 cell array
    {'C:\workSpace\examples\TimesTableApp\requirements\TimesTableRequirements.mlx'}
    {'C:\workSpace\examples\TimesTableApp\tests\tAnswerIsCorrect.m'               }
    {'C:\workSpace\examples\TimesTableApp\tests\tCurrentQuestion.m'               }
    {'C:\workSpace\examples\TimesTableApp\tests\tNewTimesTable.m'                 }

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

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

    Edges: [5×1 table]
    Nodes: [9×1 table]

impacted = bfsearch(transposed,which('source/timestable.mlapp'))
impacted = 2×1 cell array
    {'C:\workSpace\examples\TimesTableApp\source\timestable.mlapp'                }
    {'C:\workSpace\examples\TimesTableApp\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: "Edit Times Table App"
    Group: "Launch Points"
     File: "C:\workSpace\examples\TimesTableApp\utilities\editTimesTable.m"

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

shortcuts(3).File
ans = 
"C:\workSpace\examples\TimesTableApp\utilities\openRequirementsDocument.m"

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

{shortcuts.File}'
ans = 4×1 cell array
    {["C:\workSpace\examples\TimesTableApp\source\timestable.mlapp"             ]}
    {["C:\workSpace\examples\TimesTableApp\utilities\editTimesTable.m"          ]}
    {["C:\workSpace\examples\TimesTableApp\utilities\openRequirementsDocument.m"]}
    {["C:\workSpace\examples\TimesTableApp\utilities\runTheseTests.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:\workSpace\examples\TimesTableApp\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:\workSpace\examples\TimesTableApp\utilities"
        DataType: 'double'
            Data: 2
            Name: "Sam"
    CategoryName: "Assessors"

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

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

close(mainProject)

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

Похожие темы