Gradleで古いHadoop (hadoop-core-0.20.2-cdh3u6) を含めたjarを作る方法 : (Could not expand ZIP .. と出るときの対処法)


古いプロジェクトをGradleに移していたときにHadoop周りでうまくいかなかったので、その解決方法のメモ

ビフォー(失敗)

dependencies{
    compile group: 'org.apache.hadoop', name: 'hadoop-core', version: '0.20.2-cdh3u6'
}

jar {
    manifest {
        attributes(
        'Main-Class': 'path.to.Main',
        'Class-Path' : '.' 
        )
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
    from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}

として、gradle jarすると

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':jar'.
> Could not expand ZIP '...\.gradle\caches\modules-2\files-2.1\com.cloudera.cdh\hadoop-ant\0.20.2-cdh3u6\...\hadoop-ant-0.20.2-cdh3u6.pom'.

というエラーが出てきてjarが作れなかった。

アフター(解決)

dependencies{
    compile (group: 'org.apache.hadoop', name: 'hadoop-core', version: '0.20.2-cdh3u6'){
        exclude group: 'com.cloudera.cdh', module: 'hadoop-ant'
    }
    compile group: 'com.cloudera.cdh', name: 'hadoop-ant', version: '0.20.2-cdh3u6'
}

とするとビルドできた。

原因と思われるもの

hadoop-core-0.20.2-cdh3u6.pom を見ると

    <dependency>
      <groupId>com.cloudera.cdh</groupId>
      <artifactId>hadoop-ant</artifactId>
      <type>pom</type>
    </dependency>

とあり、type要素にpomが指定されている。
挙動をみるとGradleはtype要素がpomでもunzipしているようなので、そこでエラーになってしまうようだ。
そこで hadoop-ant については hadoop-core から依存関係を解決されないよう除外して、別途 hadoop-ant をとりにいくことでちゃんとビルドできるようになった。ようだ。

とりあえず課題は解決したのですが、的確な原因やより良い解決策をご存知の方がいらっしゃいましたらご教示ください m(_ _)m

補遺

Gradleは以下の動作環境で確認

------------------------------------------------------------
Gradle 2.14.1
------------------------------------------------------------

Build time:   2016-07-18 06:38:37 UTC
Revision:     d9e2113d9fb05a5caabba61798bdb8dfdca83719

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_77 (Oracle Corporation 25.77-b03)
OS:           Windows 7 6.1 amd64
------------------------------------------------------------
Gradle 2.0
------------------------------------------------------------

Build time:   2014-07-01 07:45:34 UTC
Build number: none
Revision:     b6ead6fa452dfdadec484059191eb641d817226c

Groovy:       2.3.3
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_77 (Oracle Corporation 25.77-b03)
OS:           Windows 7 6.1 amd64