2013-02-10 7 views
0

Grade에 멀티 프로젝트 (다중 자바 서브 프로젝트)가 있습니다. sourcesjavadoc 이슈를 포함하여 메이븐 저장소 (현재 로컬 프로젝트)에 업로드 할 계획입니다. . 단순히 각 하위 프로젝트에 다음 코드를 추가 한 다음 maven install이 작업을 수행합니다 이제공통 코드를`subprojects {}`블록으로 옮깁니다. 빌드

apply plugin: 'maven' 

task sourcesJar(type: Jar, dependsOn:classes) { 
     from sourceSets.main.allSource 
     classifier = 'sources' 
} 
task javadocJar(type: Jar, dependsOn:javadoc) { 
     from javadoc.destinationDir 
     classifier = 'javadoc' 
} 
artifacts { 
     archives jar 
     archives sourcesJar 
     archives javadocJar 
} 

는 그래서 내가의 subprojects { ... } 구성에이 코드를 이동 결정, 10 개 하위 프로젝트에서 동일한 코드를 가지고 그 좋은하지 부모 프로젝트. 그러나 이제는 더 이상 작동하지 않습니다. 빈 소스 및 javadoc jar 만 빌드되고 일반 jar는 무시되며 maven install은 더 이상 파일을 로컬 Maven 저장소에 복사하지 않습니다. 이 일을 올바르게하는 방법?

감사합니다.

답변

1

상위 프로젝트의 빌드 스크립트는 하위 프로젝트의 빌드 스크립트보다 먼저 평가됩니다. 일부 코드를 상위 프로젝트의 빌드 스크립트로 옮기는 경우 평가 순서가 그대로 유지되어야합니다. 즉, 해제 된 코드는 하위 프로젝트의 빌드 스크립트에 의해서만 설정된 속성을 열심히 읽지 않습니다. 예를 들어 하위 프로젝트의 빌드 스크립트로 javadoc.destinationDir을 설정 한 경우 해당 코드도 들어야하거나 상위 빌드 스크립트에서 from javadoc.destinationDir 표현의 평가를 지연해야합니다.

평가 연기 기술에는 여러 가지가 있습니다. 일부 속성 (예 : 아카이브 작업의 frominto)은 클로저를 허용합니다. 따라서 간단히 from { javadoc.destinationDir }을 수행 할 수 있습니다. 또 다른 옵션은 gradle.projectsEvaluated {}, project.afterEvaluate {} 또는 task.doFirst {}과 같은 후크를 사용하는 것입니다. 어떤 기법을 사용할 지 결정하는 첫 번째 단계는 Gradle Build Language Reference에서 해당 속성을 검색하는 것입니다.

빌드 스크립트를 더 이상 보지 않고 궁극적으로는 apply plugin: "java"을 부모 빌드 스크립트의 subprojects {} 블록으로 들어 올리지 않는 것과 관련된 특정 문제가있는 것 같습니다.

구성 주입 대신 (예 : subprojects {}을 통해) 공통 코드를 별도의 빌드 스크립트에 넣고 프로젝트 빌드 스크립트에 해당 코드를 과 함께 포함시켜야합니다. 경우에 따라 구성 주입보다 코드를 (선택적으로) 공유하는 것이 더 쉬운 방법입니다. 종종 두 가지 방법이 함께 사용됩니다.

+0

안녕하세요. Peter 님, 'apply plugin :'java '을'subprojects'로 옮겨서 문제를 해결했습니다! –