2013-02-13 2 views
0

저는 Gradle을 프로젝트의 빌드 시스템으로 사용하고 있습니다. 내가 원하는 것은 주어진 속성이 "true"로 설정된 경우 작업 A를 작업 B에 의존하게 만드는 것입니다. 이 일이 가능하고 대답이 '예'라면 어떻게 할 수 있습니까?Gradle - 컨벤션 속성을 사용하여 작업 종속성을 관리 할 수 ​​있습니까?

현재 conventionMapping을 사용하고 있지만 작동하지 않는 것 같습니다. 내 코드는 다음과 같습니다

MyTask.conventionMapping.propertyName = { MyPluginConvention.propertyName } 

if (MyTask.propertyName.equals("true")) { 
    MyTask.dependsOn ... 
} 

사전에 감사, 마린

+0

몇 가지 정보가 도움이 될 것입니다. 이 코드가 빌드 스크립트 또는 플러그인 클래스에 있습니까? MyTask 및 MyPluginConvention 클래스 이름 또는 변수 이름입니까? 과제 A를 선언하고 누가 과제 B를 선언합니까? 등 –

+0

이 코드는 플러그인 클래스에서 가져온 것입니다. MyTask 및 MyPluginConvention는 클래스 이름입니다. MyTask는 DefaultTask를 확장하고 VerificationTask를 구현합니다. 이 두 클래스는 모두 나를 선언합니다. 내가 의존하고 싶은 작업은 또한 나에 의해 선언되며 DefaultTask를 확장하고 VerificationTask를 구현합니다. – mdzh

답변

1

대신 작업/컨벤션 클래스를 사용하여 작업의, 당신이 그들의 인스턴스와 함께 작동하도록해야합니다에게. 또한 작업 종속성을 추가할지 여부를 결정해야합니다. 예를 들어 :

def myTask = project.tasks.create("myTask", MyTask) 
def otherTask = ... 
def myConvention = new MyConvention()  
... 
myTask.conventionMapping.propertyName = { myConvention.propertyName } 
// defer decision whether to depend on 'otherTask' 
myTask.dependsOn { myTask.propertyName == "true" ? otherTask : [] } 

범위에는 작업 변수가 없다면, 당신은 또한 project.myTask 또는 project.tasks["myTask"]를 통해 기존의 작업을 참조 할 수 있습니다.

추 신 : 컨벤션 객체는 대체로 extension objects으로 대체되었습니다.

+0

글쎄 ..이게 내가하는 일이야. 이 방법은 플러그인 구성의이 시점에서 속성이 아직 설정되지 않았기 때문에 작동하지 않습니다. Gradle은 컨벤션 속성을 느리게 평가합니다. 나는 평가를 '강요'할 길을 찾아야한다. 어떻게해야합니까? – mdzh

+0

"MyTask 및 MyPluginConvention는 클래스 이름입니다." 그러므로 'MyTask.conventionMapping'등은 잘못되었습니다. 즉, 변수 이름에 대해 낙타의 경우를 사용하지 않는 것이 좋습니다. Groovy의 경우 코드가 손상 될 수 있습니다. 다른 문제를 해결하기 위해 내 대답을 업데이트했습니다. –

+0

죄송합니다, 당신 말이 맞습니다. 나의 첫 번째 게시물은 좀 지저분했다. myTask 및 myPluginConvention는 사용자 정의 클래스의 인스턴스입니다. 어쨌든 ... 나는 project.afterEvaluate 메서드를 사용할 수 있다는 것을 알았고 이제는 모두 작동합니다. 어쨌든 고마워. – mdzh

관련 문제