2012-10-02 3 views
2

제가 하위 Gradle을은 -

A/B A/C

(B 및 C의 하위)

함께 프로젝트 A를 가지고 이진 바꿈 필터링없이 JAR 포함. B와 C는 하나의 Jar 파일로 A로 컴파일됩니다. 아래 코드를 사용하십시오. 잘 작동하지만 내가 /a/b/src/main/resources/prebuilt.jar에서 미리 만들어진 JAR이

gradle.taskGraph.whenReady { 
    jar { 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 

    manifest { 
     attributes("Main-Class": "brut.apktool.Main") 
    } 
    } 
} 

. 이 항아리는 프로그램 중에 필요한 임의의 파일을 캡슐화합니다. 자바 나 아무것도 없습니다. 그것들을 inputStream에서 가져 오지만 Gradle로 빌드 한 후에는 바이너리 개행 데이터를 변환 한 다음 아카이브를 엉망으로 만든다.

CopyTask 게시물을 사용하여 병을 복사하려고 시도했지만 gradle.TaskGraph.whenReady 이전에 실행되는 작업을 얻을 수 없었습니다.

위로 가기 나는 그 파일에 대한 필터링을 막지 만, Gradle에서 같은 표현식을 찾을 수 없다.

EDIT : 이것은 현재 내가하는 일이며 내 변경 사항을 특성 파일로 필터링하지만 개행을 필터링하지는 않습니다.

processResources { 
    ext.fullrev = '' 
    ant.loadfile(srcFile: "../../.git/refs/heads/master", property: ext.fullrev) 
     filter(FixCrLfFilter) 
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [version: apktoolversion, gitrev: ant.properties[ext.fullrev].substring(0,10)]) 
} 
+0

일반적으로 'a/b'의 Jar 작업에 대한 필터를 구성 했습니까? –

+0

예. 나는 그것을 (그냥 편집하고 위의 그림과 같이) 추가하려고했습니다. –

답변

1

잘 해결되었습니다. 미래의 Google 직원을 위해.

processResources { 
    from('src/main/resources/properties') { 
     include '**/*.properties' 
     into 'properties' 
     ext.fullrev = '' 
     ant.loadfile(srcFile: "../../.git/refs/heads/master", property: ext.fullrev) 
     filter(ReplaceTokens, tokens: [version: apktoolversion, gitrev: ant.properties[ext.fullrev].substring(0,10)]) 
    } 
    from('src/main/resources/') { 
     include '**/*.jar' 
    } 

    includeEmptyDirs = false 
} 

설명하기가 쉽습니다. 파일이 내 * .properties include에 속하면 해당 필터가 적용됩니다.

* .jar에 속하면 필터링없이 바로 복사됩니다. graddle/plugin이 JAR 파일의 바이너리 개행을 필터링하지 못하게합니다.