2011-01-14 2 views
12

저는 응용 프로그램을 컴파일하고 실행하는 데 필요한 몇 가지 아티팩트에 따라 다릅니다.동일한 종속성에 대해 '런타임'과 '컴파일'을 모두 지정해야하는 이유는 무엇입니까?

Gradle을 워드 프로세서에 따르면, 런타임 구성 는 컴파일 구성을 확장하여 반드시 runtime을 사용하여 의존성을 추가하는 것은 내재적 compile 의존성을 의미?

적어도 내 가정 이었지만 작동하지 않습니다. runtime을 사용하는 이슈에 따라 프로젝트가 더 이상 컴파일되지 않습니다. 모두 컴파일하고가 런타임에 표지판 클래스를 볼 수있는 응용 프로그램에 대한

compile 'oauth.signpost:signpost-core:1.2.1.2' 
runtime 'oauth.signpost:signpost-core:1.2.1.2' 

: 말 그대로해야합니다.

이 나는 ​​뭔가를 놓치고 있습니까? 그냥 바르게 보이지 않습니다 ...

답변

20

거의 오른쪽. 런타임 구성, 실제로는 확장 구성 (docs)을 확장합니다. 즉, 컴파일에 추가 된 종속성은 런타임 구성 (docs)에서 사용할 수 있습니다.

compile 'oauth.signpost:signpost-core:1.2.1.2'은 런타임 및 컴파일에서이 아티팩트를 얻는 데 충분합니다.

+2

나는 얼마나 이상한 지 알고 있습니다. 이것이 어떻게 작동하는지 이해하려고 노력합니다. http://www.gradle.org/0.9.1/docs/userguide/userguide_single.html#sec:java_plugin_and_dependency_management를 보면 그림 20.2의 구성은 인바운드 화살표가있는 모든 구성의 조합이라는 것을 의미합니까? ? 고전적인 '상속'방식의 '확장'을 생각하면 반대의 입장을 취할 것입니다. – Matthias

+0

아, 그리고 Gradle의 '런타임'구성이 Maven의 '제공된'범위에 해당한다고 가정하는 것이 맞습니까? – Matthias

+1

사용자 가이드 20.2에서 모든 구성은 모든 * 아웃 바운드 * 경로의 조합입니다 (예 : 'testRuntime'은'runtime'과'compile'의 모든 것을 포함하고 있습니다. beacuse outbound arrow은'testRuntime'이'runtime'을 연장한다는 것을 보여줍니다. –

관련 문제