사용자 도구

사이트 도구


gradle:dependencies

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
gradle:dependencies [2015/09/22 15:11]
kwon37xi [외부 모듈 의존성]
gradle:dependencies [2020/09/01 12:31] (현재)
kwon37xi [파일 의존성]
줄 239: 줄 239:
 ==== configuration 다루기 ==== ==== configuration 다루기 ====
   * [[https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.Configuration.html|Configuration]] (''configurations.compile'' 객체 같은 것)   * [[https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.Configuration.html|Configuration]] (''configurations.compile'' 객체 같은 것)
-  * ''configurations.[configuration].allDependencies'' 는 [[https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/DependencySet.html|DependencySet]] 객체로 해당 configuration의 의존성 목록. +  * 특정 configuration의 전체 의존성 정보를 보려면 ''configurations.[configurationName].resolvedConfiguration.resolvedArtifacts'' 를 이터레이션 돌면 된다. [[https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ResolvedArtifact.html|ResolvedArtifact]] 
-  정확한 의존성 목록은 project의 전체 평가가 끝난 후에만 알 수 있기 때문에 ''afterEvalue'' 호출할 때만 전체 ''Dependency'' 목록 조회가 가능하다. +    * ''resolvedArtifact.getModuleVersion().getId()''는 [[https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ModuleVersionIdentifier.html|ModuleVersionIdentifier]] 객체며 여기에 모듈에 관한 group, name, version 정보가 들어있다. 
-  * ''DependencySet''은 [[https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/Dependency.html|Dependency]]의 컬렉션이다.<code groovy> +  * 따라서 아래와 같이 이터레이션을 돌면 의존성 정보를 알 수 있다.<code groovy> 
-// 의존성 정보 출력 +configurations.runtime.resolvedConfiguration.resolvedArtifacts.each { raf -> 
-project.afterEvaluate { +    def cid = raf.getModuleVersion().getId() 
-    configurations.compile.allDependencies.each { dep -> +    println "Dependency for runtime ${cid.group}:${cid.name}:${cid.version}"
-        println "AE ## dep ${dep.group}:${dep.name}:${dep.version}" +
-    }+
 } }
 +
 </code> </code>
- 
 ==== 클라이언트 모듈 의존성 ==== ==== 클라이언트 모듈 의존성 ====
   * 클라이언트 모듈 의존성은 빌드 스크립트에서 직접 이행적 의존성을 선언할 수 있게 해준다. 즉, pom.xml 같은 모듈 기술자를 대체하는 기법이다.   * 클라이언트 모듈 의존성은 빌드 스크립트에서 직접 이행적 의존성을 선언할 수 있게 해준다. 즉, pom.xml 같은 모듈 기술자를 대체하는 기법이다.
줄 280: 줄 278:
     runtime files('libs/a.jar', 'libs/b.jar')     runtime files('libs/a.jar', 'libs/b.jar')
     runtime files('dir/to/classes') // 디렉토리 자체를 클래스패스에 추가     runtime files('dir/to/classes') // 디렉토리 자체를 클래스패스에 추가
 +    runtime rootProject.files('root-project-dir') // rootProject의 디렉토리를 클래스패스에 추가
     runtime fileTree(dir: 'libs', include: '*.jar')     runtime fileTree(dir: 'libs', include: '*.jar')
 } }
줄 671: 줄 670:
 리포지토리 설정 상태에 따라 캐시의 싱크가 안 맞을 수도 있다. 리포지토리를 잘못 설정했거나, 변하지 않는 모듈을 잘못 배포했을 수 있다. 리포지토리 설정 상태에 따라 캐시의 싱크가 안 맞을 수도 있다. 리포지토리를 잘못 설정했거나, 변하지 않는 모듈을 잘못 배포했을 수 있다.
  
-''%%--%%refresh-depdendencies'' 옵션을 사용하면 모든 의존성 캐시를 갱신한다. 이 옵션을 사용하면 결정된 모듈과 artifact의 모든 캐시된 항목들을 무시한다. 모든 리포지토리에 대해 의존성 결정을 다시 수행하고 다운로드한다.+''%%--%%refresh-dependencies'' 옵션을 사용하면 모든 의존성 캐시를 갱신한다. 이 옵션을 사용하면 결정된 모듈과 artifact의 모든 캐시된 항목들을 무시한다. 모든 리포지토리에 대해 의존성 결정을 다시 수행하고 다운로드한다.
  
 ==== 의존성 캐시 세부 설정 ==== ==== 의존성 캐시 세부 설정 ====
줄 692: 줄 691:
  
 ===== provided ===== ===== provided =====
 +  * Gradle 2.x 에서 최종적으로 ''**compileOnly**'' Scope가 생겼다.
 +  * [[https://github.com/gradle/gradle/blob/master/design-docs/provided-dependencies.md|Gradle Provided Dependencies design]]
 +  * 따라서 아래 방법들은 Gradle 구버전에서만 사용하고 최신 버전에서는 ''compileOnly''를 사용한다.
 +  * ''compileOnly'' 는 의존성이 test 로 이행되지 않기 때문에 test 에는 ''testCompile'' 의존성으로 지정하거나 혹은 아래와 같이 강제로 이행처리를 해야한다. [[https://discuss.gradle.org/t/compileonly-dependencies-are-not-available-in-tests/15366/6|compileOnly dependencies are not available in tests]]
 +<code>
 +sourceSets {
 +    test.compileClasspath += configurations.compileOnly
 +    test.runtimeClasspath += configurations.compileOnly
 +}
 +
 +// 혹은
 +configurations {
 +    testImplementation.extendsFrom compileOnly
 +}
 +</code>
 +
 아래 모든 방법들을 사용하기 보다는 [[gradle:web|Gradle Web(War) Plugin]] 에 나오는 exclude 방식을 추천. 아래 모든 방법들을 사용하기 보다는 [[gradle:web|Gradle Web(War) Plugin]] 에 나오는 exclude 방식을 추천.
   * [[http://www.sinking.in/blog/provided-scope-in-gradle/|Provided Scope in Gradle | Sinking In]] 참조 문서   * [[http://www.sinking.in/blog/provided-scope-in-gradle/|Provided Scope in Gradle | Sinking In]] 참조 문서
줄 774: 줄 789:
 ./gradlew dependencyInsight --configuration testCompile --dependency junit  ./gradlew dependencyInsight --configuration testCompile --dependency junit 
 </code> </code>
 +
 +===== CompositeBuild =====
 +  * [[https://docs.gradle.org/current/userguide/composite_builds.html|Gralde Composite Build]] 여러 프로젝트 연관관계가 있을 때 다른 의존 프로젝트를 리포지토리에 올리지 않고 로컬에 있는 상태로 의존할 수 있게 해준다.
 +  * [[https://github.com/gradle/gradle/tree/c7da24ebff119eacc8899ce1c609dd0d426f1243/subprojects/docs/src/samples/compositeBuilds/basic|gradle/subprojects/docs/src/samples/compositeBuilds/basic at c7da24ebff119eacc8899ce1c609dd0d426f1243 · gradle/gradle]]
 +  * [[https://blog.jetbrains.com/idea/2017/03/webinar-recording-composite-builds-with-gradle/|Webinar Recording: Composite Builds with Gradle and IntelliJ IDEA 2017.1 | IntelliJ IDEA Blog]]
 +  * ''settings.gradle''에서 <code groovy>
 +includeBuild '../another_project''
 +</code>
 +
 +===== Source Dependency =====
 +  * [[https://dzone.com/articles/introducing-source-dependencies-in-gradle|Introducing Source Dependencies in Gradle - DZone Java]]
  
 ===== 참조할 DSL ===== ===== 참조할 DSL =====
줄 782: 줄 808:
   * [[http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ConfigurationContainer.html|ConfigurationContainer]]   * [[http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ConfigurationContainer.html|ConfigurationContainer]]
   * [[http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.Configuration.html|Configuration]]   * [[http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.Configuration.html|Configuration]]
 +
 +
 +===== Dependency Management Plugin =====
 +https://github.com/spring-gradle-plugins/dependency-management-plugin
 +
 +
gradle/dependencies.1442904094.txt.gz · 마지막으로 수정됨: 2015/09/22 15:11 저자 kwon37xi