이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

프로젝트를 만들고 프로그래밍 방식으로 편집하기

이 예제에서는 프로젝트 API를 사용하여 새 프로젝트를 만든 후 파일을 조작하기 위해 프로젝트 작업을 자동화하는 방법을 보여줍니다. 그리고 명령줄에서 프로젝트를 만들고 파일과 폴더를 추가하고 프로젝트 경로를 설정하는 방법을 다루고, 프로젝트 바로 가기를 정의하고 다른 프로젝트에서 새 프로젝트에 대한 참조를 만드는 방법도 다룹니다. 수정된 파일, 종속성, 바로 가기, 레이블을 프로그래밍 방식으로 사용하는 방법도 보여줍니다.

예제 파일 설정하기

Times Table App 예제 프로젝트 파일의 작업본을 만들고 프로젝트를 엽니다. 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

10번째 파일의 레이블을 살펴봅니다.

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

새 프로젝트 만들기

Times Table Game 프로젝트를 만듭니다. 이 프로젝트는 Times Table App의 바탕이 되는 게임 로직을 저장합니다. Times Table Game 프로젝트는 프로젝트 참조를 통해 Times Table App 프로젝트에 사용됩니다.

프로젝트를 만들고 프로젝트 이름을 설정합니다.

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

기본 프로젝트 폴더에 있는 Times Table App 게임 로직을 새 프로젝트 폴더로 옮긴 다음 Times Table Game 프로젝트에 추가합니다. 그런 다음 Times Table App 프로젝트에서 파일을 제거합니다.

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

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

Times Table Game 프로젝트 루트 폴더를 Times Table Game 프로젝트 경로에 추가합니다. 이렇게 하면 Times Table App 프로젝트나 Times Table App 프로젝트를 참조하는 모든 프로젝트를 불러온 경우 timesTableGame.m 파일을 사용할 수 있습니다.

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

프로젝트 참조 추가하기

새 Times Table Game 프로젝트를 Times Table App 프로젝트에 프로젝트 참조로 추가합니다. 이렇게 하면 Time Table App 프로젝트에서 Time Game 프로젝트의 파일을 보고 편집하고 실행할 수 있습니다.

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

수정된 파일 가져오기

Times Table App 프로젝트에서 수정된 모든 파일을 가져옵니다. 이 목록을 프로젝트의 파일 > 수정됨 보기와 비교합니다. Times Table App 프로젝트에서 제거되거나 수정된 파일은 물론, 새 Times Table Game 프로젝트의 파일도 볼 수 있습니다.

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 함수를 사용하여 Times Table App 프로젝트에서 수정되지 않은 파일을 나타내는 논리형 배열을 가져옵니다. 이 배열을 사용하여 수정되지 않은 파일 목록을 가져옵니다.

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)

Times Table App 프로젝트의 종속성 목록을 가져옵니다. 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)));

동일한 종속성 분석 그래프를 프로젝트의 영향 보기에서도 볼 수 있습니다. 그래프를 플로팅하려면 영향 보기를 이미지 파일로 저장하십시오.

바로 가기 쿼리하기

바로 가기를 사용하여, 자주 수행하는 작업과 자주 액세스하는 파일을 저장하거나 시작 작업과 종료 작업을 자동화할 수 있습니다.

Times Table App 프로젝트 바로 가기를 가져옵니다.

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형의 새로운 레이블 범주를 만듭니다. Times Table App 프로젝트의 레이블 창에 새로운 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"

레이블을 프로젝트 파일에 연결합니다. Times Table App 프로젝트에서 이 프로젝트 파일을 선택할 경우 Label 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의 숫자형 데이터에 흔히 사용되는 데이터형인 double형의 새로운 레이블 범주를 만듭니다.

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)

참고 항목

관련 항목