2011-01-14 2 views
0

아마도 Gradle이 작동하는 방식에 대해 뭔가 빠져 있습니다. 여기에있는 구성은 구성 만 포함하는 상위 프로젝트입니다. 즉, 빌드 할 때 생성되는 아티팩트가 없으며 모든 하위 프로젝트를 관리하고 구축하기 만합니다.Gradle은 fileTree를 사용하여 하위 프로젝트에 종속성을 주입하지 못합니다

이제 하위 프로젝트가 의존 관계 (dependencies)의 구성을 공유하는, 그래서 내가 루트 프로젝트의 build.gradle에서하는 것은 생각 :

subprojects { 
    dependencies { 
    compile fileTree(dir: 'lib', includes: ['*.jar']) 
    }  
} 

, 그러나, 작동하지 않는 것이 다소 모호한 오류와 함께 실패 메시지 :

문제는 평가가 발생했습니다 루트 프로젝트 'qype - 안드로이드'원인 : 방법 없음 서명 : org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.compile() (org.gradle.api.internal.file.DefaultConfigurableFileTree) 값 : [설정 파일 'LIB'] 가능한 솔루션 :이 인수 형에 적용 모듈 (java.lang.Object 상위)

후 일부 시행 착오, 나는 부모 프로젝트에 '자바'플러그인을 적용하여이 문제를 "고칠 수"있습니다.

어째서? Gradle 문서에서 fileTree 종속성에 Java 플러그인이 필요하다는 것을 어디에도 알 수 없습니다. 그럼에도 불구하고 구성중인 프로젝트에서 구성을 주입하는 프로젝트에서 필자는 왜 이것을 필요로합니까? (하위 프로젝트는 모두 Java 플러그인을 직접 적용합니다)?

N 개의 다른 하위 프로젝트가 다양한 특성을 갖고 있고 다른 플러그인을 적용 할 경우 상위 프로젝트에서 항상 집합을 적용해야 함을 의미합니다. 플러그인 자체가 어딘가에서 사용됩니까?

답변

2

'java'플러그인이 필요한 것은 fileTree이 아닙니다.

정의되지 않은 compile 종속성 구성에 대한 오류 메시지가 표시됩니다. Java 플러그인은이 구성을 사용자 정의하므로 종속성 (fileTree 포함)을 추가 할 수 있습니다.

+0

감사합니다. 그러나, 내가 자바 프로젝트가 아닐 때 부모 프로젝트에 Java 플러그인을 적용해야한다는 것은 어색하다. ... – Matthias

+1

그러나 루트 프로젝트에 자바 플러그인을 적용 할 필요는 없다. 단지'apply plugin : 'subproject' 섹션에 'java'명령. –

+0

이 이상합니다. 나는 거기에 넣지 않았지만 모든 서브 프로젝트의 build.gradle에서'apply plugin : 'java'라고 불렀다. 'subprojects' 블록에서 그렇게하는 것의 차이점은 하위 프로젝트의 빌드 파일에서 수행하는 것과 비교됩니다. – Matthias

관련 문제