사용자 도구

사이트 도구


gradle:dependencies

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
gradle:dependencies [2014/09/29 14:25]
kwon37xi [파일 의존성]
gradle:dependencies [2020/09/01 12:31] (현재)
kwon37xi [파일 의존성]
줄 237: 줄 237:
 </code> </code>
  
 +==== configuration 다루기 ====
 +  * [[https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.Configuration.html|Configuration]] (''configurations.compile'' 객체 같은 것)
 +  * 특정 configuration의 전체 의존성 정보를 보려면 ''configurations.[configurationName].resolvedConfiguration.resolvedArtifacts'' 를 이터레이션 돌면 된다. [[https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ResolvedArtifact.html|ResolvedArtifact]]
 +    * ''resolvedArtifact.getModuleVersion().getId()''는 [[https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ModuleVersionIdentifier.html|ModuleVersionIdentifier]] 객체이며 여기에 모듈에 관한 group, name, version 정보가 들어있다.
 +  * 따라서 아래와 같이 이터레이션을 돌면 의존성 정보를 알 수 있다.<code groovy>
 +configurations.runtime.resolvedConfiguration.resolvedArtifacts.each { raf ->
 +    def cid = raf.getModuleVersion().getId()
 +    println "Dependency for runtime ${cid.group}:${cid.name}:${cid.version}"
 +}
 +
 +</code>
 ==== 클라이언트 모듈 의존성 ==== ==== 클라이언트 모듈 의존성 ====
   * 클라이언트 모듈 의존성은 빌드 스크립트에서 직접 이행적 의존성을 선언할 수 있게 해준다. 즉, pom.xml 같은 모듈 기술자를 대체하는 기법이다.   * 클라이언트 모듈 의존성은 빌드 스크립트에서 직접 이행적 의존성을 선언할 수 있게 해준다. 즉, pom.xml 같은 모듈 기술자를 대체하는 기법이다.
줄 267: 줄 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')
 } }
줄 658: 줄 670:
 리포지토리 설정 상태에 따라 캐시의 싱크가 안 맞을 수도 있다. 리포지토리를 잘못 설정했거나, 변하지 않는 모듈을 잘못 배포했을 수 있다. 리포지토리 설정 상태에 따라 캐시의 싱크가 안 맞을 수도 있다. 리포지토리를 잘못 설정했거나, 변하지 않는 모듈을 잘못 배포했을 수 있다.
  
-''%%--%%refresh-depdendencies'' 옵션을 사용하면 모든 의존성 캐시를 갱신한다. 이 옵션을 사용하면 결정된 모듈과 artifact의 모든 캐시된 항목들을 무시한다. 모든 리포지토리에 대해 의존성 결정을 다시 수행하고 다운로드한다.+''%%--%%refresh-dependencies'' 옵션을 사용하면 모든 의존성 캐시를 갱신한다. 이 옵션을 사용하면 결정된 모듈과 artifact의 모든 캐시된 항목들을 무시한다. 모든 리포지토리에 대해 의존성 결정을 다시 수행하고 다운로드한다.
  
 ==== 의존성 캐시 세부 설정 ==== ==== 의존성 캐시 세부 설정 ====
줄 679: 줄 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]] 참조 문서
   * Spring Source에서 [[gradle:propdeps|propdeps plugin]]을 공개한 상태라서 아래와 같은 방식은 불필요해졌다.   * Spring Source에서 [[gradle:propdeps|propdeps plugin]]을 공개한 상태라서 아래와 같은 방식은 불필요해졌다.
-  * [[https://github.com/nebula-plugins/gradle-extra-configurations-plugin|Gradle extra configurations plugin]]도 optional, provided 지원.+  * [[https://github.com/nebula-plugins/gradle-extra-configurations-plugin|Nebula Gradle extra configurations plugin]]도 optional, provided 지원.
  
 컴파일시에는 클래스패스에 넣지만, 실행/배포시에는 빠져야 하는 의존성이 있을 수 있다. 예를 들면 Servlet API 같은 것들이 그렇다. Servlet API는 Tomcat등의 WAS에 내장되어 있으므로 배포는 할 필요가 없다. 컴파일시에는 클래스패스에 넣지만, 실행/배포시에는 빠져야 하는 의존성이 있을 수 있다. 예를 들면 Servlet API 같은 것들이 그렇다. Servlet API는 Tomcat등의 WAS에 내장되어 있으므로 배포는 할 필요가 없다.
줄 755: 줄 783:
 } }
 </code> </code>
 +
 +===== dependencyInsight =====
 +  * [[http://java.dzone.com/articles/gradle-goodness-getting-more|Gradle Goodness: Getting More Dependency Insight]]
 +  * 특정 의존성에 관해 상세 정보 출력<code sh>
 +./gradlew dependencyInsight --configuration testCompile --dependency junit 
 +</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 =====
줄 763: 줄 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.1411968315.txt.gz · 마지막으로 수정됨: 2014/09/29 14:25 저자 kwon37xi