어떤 Gradle 스크립트를 다른 스크립트로 Import하려면 어떻게 해야 합니까?
복잡한 Gradle 스크립트를 사용하고 있습니다.이 스크립트는 다수의 NetBeans 프로젝트를 구축하여 여러 환경에 도입하는 데 필요한 다양한 기능을 갖추고 있습니다.
스크립트는 매우 잘 작동하지만, 기본적으로는 프로젝트와 환경 정보가 포함된 6개의 맵을 통해 모두 구성됩니다.
간단한 빌드 파일에서 맵을 정의하고 다른 파일에서 태스크를 Import할 수 있도록 태스크를 다른 파일로 추상화합니다.이렇게 하면 여러 프로젝트에 동일한 핵심 태스크를 사용하고 이러한 프로젝트를 간단한 맵세트로 구성할 수 있습니다.
Ant의 작업과 유사한 방법으로 Gradle 파일을 다른 파일로 Import할 수 있는 방법을 가르쳐 주실 수 있습니까?그래들 문서를 찾아봤지만 소용이 없었어
추가 정보
아래 Tom의 답변이 있은 후, 저는 제가 의미하는 바를 정확하게 설명하려고 노력했습니다.
기본적으로 여러 서브프로젝트를 실행하는 Gradle 스크립트가 있습니다.단, 서브프로젝트는 모두 NetBeans 프로젝트이며 독자적인 개미 빌드 스크립트가 포함되어 있기 때문에 Gradle에서는 각각 호출해야 합니다.
문제는 파일 상단에 다음과 같은 설정이 있다는 것입니다.
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
그런 다음 다음과 같은 작업을 생성합니다.
projects.each({
task "checkout_$it.shortname" << {
// Code to for example check module out from cvs using config from 'it'.
}
})
이러한 종류의 태스크 생성 스니펫이 많이 있습니다.이러한 스니펫은 모두 범용입니다.프로젝트 리스트의 설정에 따라 달라집니다.
이 스크립트를 다른 스크립트에 삽입하여 다음과 같은 방법으로 Import할 수 있습니다.
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
import("tasks.gradle") // This will import and run the script so that all tasks are generated for the projects given above.
따라서 이 예에서는 tasks.gradle에 모든 범용 태스크 생성 코드가 포함되어 메인 build.gradle 파일에 정의된 프로젝트에 대해 실행됩니다.이와 같이 tasks.gradle은 NetBeans ant 빌드 파일이 있는 다수의 서브프로젝트로 구성된 모든 대형 프로젝트에서 사용할 수 있는 파일입니다.
9.0.9에 .하시면 됩니다.apply from: 'other.gradle'
명령어를 입력합니다.
다음 사이트에서 같은 질문을 읽어보십시오.Gradle 빌드의 공통 부분을 분할/인수화하는 방법이 있습니까?
서 원하는 을 일련의 할 수 .플러그인 내에 일 수 .이 시스템에서는 디렉토리 내에 있는 groovy 파일일 수 있는 플러그인 세트에 필요한 기능을 추가할 수 있습니다.buildSrc/src/main/groovy
플러그인은 Jar로 번들 할 수도 있지만 아직 시도해보지 않았습니다.
실제로 빌드 파일을 보지 않고는 무엇이 가장 도움이 되는지 알 수 없습니다.
멀티프로젝트 빌드로 환경을 구축하면 원하는 추상화를 실현할 수 있을 것으로 생각합니다.
프로젝트 루트build.gradle
도메인 고유의 모든 것 및 모든 서브프로젝트에 적용되는 것을 정의합니다.
repositories {
add(new org.apache.ivy.plugins.resolver.FileSystemResolver()) {
name = 'destRepo'
addIvyPattern( file( project.properties['repo.dest.dir']).absolutePath + '/[organisation]/[module]/ivys/ivy(-[revision]).xml')
addArtifactPattern( file( project.properties['repo.dest.dir']).absolutePath + '/[organisation]/[module]/[type]s/[artifact](-[revision]).[ext]')
descriptor = 'optional'
checkmodified = true
}
...
}
...
subprojects {
sourceCompatibility = 1.5
targetCompatibility = 1.5
group = 'my.group'
version = '1.0'
uploadArchives {
uploadDescriptor = true
repositories {
add rootProject.repositories.destRepo
}
}
apply{ type my.group.gradle.api.plugins.MyPlugin }
...
}
dependsOnChildren()
프로젝트 루트 디렉토리에는 다음 파일이 포함될 수도 있습니다.gradle.properties
프로젝트에서 사용하는 속성을 정의하는 파일:
buildDirName=staging
repo.dest.dir=/var/repo
...
그런 다음 프로젝트 루트의 추가 파일에settings.gradle
실제로 서브프로젝트를 가리킵니다.
include 'my-first-component',
'my-second-component'
...
project(':my-first-component').projectDir = new File(rootDir, 'path/to/first/component')
project(':my-second-component').projectDir = new File(rootDir, 'path/to/second/component')
...
각 서브프로젝트 디렉토리에는build.gradle
하위 프로젝트별 내용만 포함하는 파일입니다.
호출해도 상관없습니다.gradle
gradle은 프로젝트 루트 또는 서브프로젝트 디렉토리에서 다양한 파일에서 수행된 모든 정의를 자동으로 고려합니다.
또한 루트 수준에서 기본 플러그인을 초과하는 플러그인을 로드하지 않는 한 프로젝트 루트에 대한 컴파일 태스크는 실행되지 않습니다.
이것은 Kotlin DSL(build.gradle.kts)의 예입니다.
apply(from = "scripts/my-script.gradle.kts")
스크립트/my-script.gradle.kts:
println(
"""
I am defined at the top level of the script and
executed at the configuration phase of build process
"""
)
tasks.create("MyTask") {
println(
"""
I am defined in a task and
run at the configration phase of build process"""
)
doLast {
// ...
}
}
Kotlin DSL의 다른 스크립트로부터 함수를 Import 하는 방법에 대해서는, 이 회답과 이 회답을 참조해 주세요.
언급URL : https://stackoverflow.com/questions/2265283/how-can-i-import-one-gradle-script-into-another
'programing' 카테고리의 다른 글
XAMPP InnoDB에서 MySQL을 시작할 때 오류 발생 (0) | 2022.11.06 |
---|---|
다중 테이블 MariaDB 데이터베이스 파티셔닝 솔루션 (0) | 2022.11.06 |
MySQL LIMIT, OFFSET을 사용한 페이지 번호 매기기 (0) | 2022.11.06 |
세션 변수로 배열 (0) | 2022.11.06 |
Python에서 데몬을 작성하려면 어떻게 해야 하나요? (0) | 2022.11.06 |