New Score :0
High Score :0
Run Best
NICE BUSINESS TYPE INDICATOR
3. 급전을 친구에게 빌렸는데 오늘이 돈을 주기로 한날.. 그런데 카드값을 내야하는 날도 오늘인데... 이걸 어쩌나...
4. 우리 회사는 중요한 의사 결정을 할때?
5. 열심히 일한 나를 위한 선물을 주고싶다. 어떤게 좋을까?
6. 은행에서 투자상품을 추천받았다. 어떤걸 가입하지?
7. 회사에서의 나는?
8. 꿈에서 깨어나니 20년 전으로 돌아갔다. 당신이 제일 먼저 하는일은?
9. 내가 인사 담당자라면 신규 입사자 채용 시 제일 중요하게 보는것은?
10. 회사에 정말 싫어하는 동료가 있다면?
11. 가난한 집의 가장이 되었다.. 자녀의 생일 날 선물은?
12. 평소 회사 출근 스타일은?
13.회사 체육대회 하는 날이다. 오늘 뭐하지?
14. 나의 업무 스타일은?
Gradle은 의존성 기반 프로그래밍의 한 예로, 작업과 작업 간의 종속 관계를 정의합니다. Gradle은 이러한 작업이 종속 항목 순서대로 실행되도록 보장합니다. 빌드 스크립트와 플러그인은 이 종속성 그래프를 구성합니다. 이 페이지에서는 Gradle이 이러한 스크립트를 해석할 때 거치는 수명 주기의 단계에 대해 설명합니다. 또한 이 페이지에서는 알림을 사용하여 수명 주기의 이벤트에 대응하는 방법을 설명합니다.
Task Graphs
일부 빌드 도구는 작업을 실행할 때 작업 그래프를 조합합니다. Gradle은 작업을 실행하기 전에 작업 그래프를 작성합니다. 구성 방지 기능을 사용하면 Gradle은 현재 빌드에 포함되지 않은 작업의 구성을 건너뜁니다.
각 프로젝트 내에서 작업은 DAG(방향성 비순환 그래프)를 형성합니다.
The diagram represents dependencies between tasks as arrows:
플러그인과 자체 빌드 스크립트는 모두 작업 종속성 메커니즘을 통해 작업 그래프에 기여합니다.
Build Phases
Gradle 빌드에는 세 가지 단계가 있습니다. Gradle은 이러한 단계를 첫 번째 초기화, 구성, 마지막으로 실행의 순서로 실행합니다.
- 빌드에 참여하는 모든 프로젝트의 빌드 스크립트를 평가합니다.
- 요청된 작업에 대한 작업 그래프를 만듭니다.
- 선택한 각 작업을 종속성 순서대로 예약하고 실행합니다.
Example
다음 예제에서는 설정 및 빌드 파일의 어떤 부분이 다양한 빌드 단계에 해당하는지 보여 줍니다.
rootProject.name = "basic"
println("This is executed during the initialization phase.")
println("This is executed during the configuration phase.")
tasks.register("configured") {
println("This is also executed during the configuration phase, because :configured is used in the build.")
}
tasks.register("test") {
doLast {
println("This is executed during the execution phase.")
}
}
tasks.register("testBoth") {
doFirst {
println("This is executed first during the execution phase.")
}
doLast {
println("This is executed last during the execution phase.")
}
println("This is executed during the configuration phase as well, because :testBoth is used in the build.")
}
다음 명령은 위에서 지정한 테스트 및 testBoth 작업을 구성하고 실행합니다. Gradle은 요청된 작업과 그 종속 항목만 구성하므로 구성된 작업은 구성되지 않습니다.
> gradle test testBoth
This is executed during the initialization phase.
> Configure project :
This is executed during the configuration phase.
This is executed during the configuration phase as well, because :testBoth is used in the build.
> Task :test
This is executed during the execution phase.
> Task :testBoth
This is executed first during the execution phase.
This is executed last during the execution phase.
BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed
Initialization
초기화 단계에서 Gradle은 빌드에 참여하는 프로젝트 및 포함된 빌드를 감지합니다. Gradle은 먼저 설정 파일을 평가합니다. 그런 다음 Gradle은 각 프로젝트의 프로젝트 인스턴스를 인스턴스화합니다.
Detect Settings File
:
- Gradle은 상위 디렉토리에서 settings.gradle(.kts) 파일을 찾습니다.
- Gradle이 settings.gradle(.kts) 파일을 찾으면 현재 프로젝트가 다중 프로젝트 빌드의 일부인지 확인합니다. 그렇다면 Gradle은 다중 프로젝트로 빌드됩니다.
- Gradle이 settings.gradle(.kts) 파일을 찾지 못하면 Gradle은 단일 프로젝트로 빌드됩니다.
표준 Gradle 프로젝트 레이아웃에서 프로젝트 경로는 디스크의 실제 하위 프로젝트 레이아웃과 일치합니다. 설정 파일에 대한 자동 검색은 표준 프로젝트 레이아웃이 있는 다중 프로젝트 빌드에서만 작동합니다. 비표준 레이아웃을 사용하는 프로젝트를 빌드하려면 settings.gradle(.kts)이 포함된 디렉터리에서 빌드를 실행합니다.
Evaluate Settings File
- 빌드 스크립트 클래스 경로에 라이브러리를 추가합니다.
- 복합 빌드에 참여하는 포함된 빌드를 정의합니다.
- 다중 프로젝트 빌드에 참여하는 프로젝트를 정의합니다.
Gradle은 빌드의 모든 프로젝트에 대해 프로젝트를 만듭니다. 기본적으로 각 프로젝트의 이름은 최상위 디렉터리의 이름과 같습니다. 루트 프로젝트를 제외한 모든 프로젝트에는 부모 프로젝트가 있습니다. 모든 프로젝트에는 하위 프로젝트가 있을 수 있습니다.
Configuration
구성 단계에서 Gradle은 초기화 단계에서 생성된 프로젝트에 할 일 및 기타 속성을 추가합니다. 구성 단계가 끝나면 Gradle은 요청된 작업에 대한 완전한 작업 실행 그래프를 갖게 됩니다.
Project Evaluation
프로젝트 평가 중에 Gradle은 빌드 스크립트를 평가하여 프로젝트 내에서 작업 계층 구조를 구축합니다. 이 계층 구조에는 모든 작업에 대한 입력, 작업 및 출력이 포함됩니다.
React to Project Evaluation
프로젝트 평가 직전과 직후에 알림을 받을 수 있습니다. 이러한 알림은 프로젝트 평가가 실패한 경우에도 작동합니다. 모든 프로젝트 또는 특정 프로젝트에 대한 프로젝트 평가 알림을 구성할 수 있습니다. 예를 들어 이러한 알림을 다음에 사용할 수 있습니다.
- 빌드 스크립트에서 모든 정의를 적용한 후의 추가 구성
- 사용자 지정 로깅
- 사용자 지정 프로파일링
다음 예제에서는 gradle.beforeProject()를 사용하여 hasTests 속성을 특정 테스트에 추가합니다. 나중에 예제에서는 gradle.afterProject()를 사용하여 hasTests 속성 값이 true인 각 프로젝트에 테스트 작업을 추가합니다.
gradle.beforeProject {
// Set a default value
project.ext.set("hasTests", false)
}
gradle.afterProject {
if (project.ext.has("hasTests") && project.ext.get("hasTests") as Boolean) {
val projectString = project.toString()
println("Adding test task to $projectString")
tasks.register("test") {
doLast {
println("Running tests for $projectString")
}
}
}
}
extra["hasTests"] = true
> gradle -q test
Adding test task to project ':project-a'
Running tests for project ':project-a'
클로저 대신 리스너를 통해 이러한 이벤트를 수신하려면 빌드의 Gradle 인스턴스에 ProjectEvaluationListener를 추가 하세요.
Task Execution Graph Assembly
프로젝트 평가 중에 Gradle은 작업 실행 그래프, 즉 작업 간의 종속성 관계를 나타내는 DAG를 조합합니다.
React to Task Execution Graph Assembly
Gradle이 프로젝트의 작업 실행 그래프 작성을 완료한 직후에 알림을 받을 수 있습니다.
이러한 이벤트를 수신하려면 프로젝트의 TaskExecutionGraph에 TaskExecutionGraphListener를 추가합니다.
Task Creation
프로젝트 평가 중에 Gradle은 작업 및 구성 작업을 등록합니다. 구성 작업은 해당 작업에 대한 입력, 출력 및 작업을 정의합니다. 작업이 요청된 작업에 대한 작업 그래프의 일부인 경우 평가됩니다.
React to Task Creation
Gradle이 프로젝트에 할 일을 추가한 직후에 알림을 받을 수 있습니다. 예를 들어 이러한 알림을 사용하여 일부 기본값 또는 메서드를 설정할 수 있습니다.
tasks.whenTaskAdded {
extra["srcDir"] = "src/main/java"
}
val a by tasks.registering
println("source dir is ${a.get().extra["srcDir"]}")
> gradle -q a
source dir is src/main/java
클로저 대신 수신기를 통해 이러한 이벤트를 수신하려면 TaskContainer에 작업을 추가합니다.
Execution
실행 단계에서 Gradle은 작업을 실행합니다. Gradle은 구성 단계에서 생성된 작업 실행 그래프를 사용하여 실행할 작업을 결정합니다.
Task Execution
작업 실행에는 일반적으로 빌드와 연결하는 대부분의 작업(라이브러리 다운로드, 코드 컴파일, 입력 읽기 및 출력 작성)이 포함됩니다.
React to Task Execution Notifications
작업 실행 이벤트는 구성 캐시와 호환되지 않습니다. 빌드 서비스를 사용하여 구성 캐시와 호환되는 방식으로 작업 실행에 대한 정보를 받을 수 있습니다.
tasks.register("ok")
tasks.register("broken") {
dependsOn("ok")
doLast {
throw RuntimeException("broken")
}
}
gradle.taskGraph.beforeTask {
println("executing $this ...")
}
gradle.taskGraph.afterTask {
if (state.failure != null) {
println("FAILED")
} else {
println("done")
}
}
> gradle -q broken
executing task ':ok' ...
done
executing task ':broken' ...
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':broken'.
> broken
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 0s
클로저 대신 수신기를 통해 이러한 이벤트를 수신하려면 프로젝트의 TaskExecutionGraph에 TaskExecutionListener를 추가합니다.