読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

javaのビルドをgradleで行う:調査編2:依存から1行で特定jarを除外!

ビルド java gradle

javaのビルドをgradleで行う:調査編1:maven・SBTとの違い - treeのメモ帳
調査編その2です。

今回は依存jarから特定のjarを除外するのですが、
1行で一気に依存がら特定jarを除外する
をやってみました。
この説明では意味が伝わりにくいので、具体的なサンプルを見ていきましょう!

mavenの場合の依存の除外
まずはmavenの場合です。

<dependency>
    <groupId>org.seasar.container</groupId>
    <artifactId>s2-extension</artifactId>
    <version>2.4.45</version>
    <exclusions>
        <exclusion>
            <artifactId>commons-logging</artifactId>
            <groupId>commons-logging</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.seasar.container</groupId>
    <artifactId>s2-framework</artifactId>
    <version>2.4.45</version>
    <exclusions>
        <exclusion>
            <artifactId>commons-logging</artifactId>
            <groupId>commons-logging</groupId>
        </exclusion>
    </exclusions>
</dependency>

maven使いがよく見る光景ですね。
(#^ω^)excludeする作業はもう疲れたぞ!
もしincludeするjarが50個あったらどうでしょうかね。
(;^ω^)m2e pluginで除外できるとはいえこの作業は無いわぁ・・
マルチプロジェクト構成の場合は、親・子でそれぞれ除外が必要という鬼畜仕様。
1jar毎にexcludeを書きたくない、1箇所exclude設定して全jarに対して除外を適用したいですね。

gradleの場合の依存の除外
続いてgradleの場合です。マルチプロジェクト構成です。

subprojects {
    configurations {
        all*.exclude module: 'commons-logging'
        all*.exclude module: 'log4j'
        all*.exclude module: 'slf4j-jdk12'
        all*.exclude module: 'slf4j-jdk14'
    }

    repositories {
        mavenCentral()
        mavenLocal()
    }

    dependencies {
        compile group: 'org.seasar.container', name: 's2-extension', version: '2.4.45'
        compile group: 'org.seasar.container', name: 's2-framework', version: '2.4.45'
    }
}

project(':base') {
}

project(':solr-server') {
    dependencies {
        compile project(':base')
    }
}

configurationsの部分に注目です。
all*.excludeの部分1行につき、全プロジェクトから特定jarを除外!
しているのです。
(`・ω・´)b これがやりたかったのですよ!
この例では、baseプロジェクトを親とし、solr-serverプロジェクトを子としています。
exclude設定は両者に有効で、includeした全jarに対し、commons-logging等のjarをexcludeしています。
mavenのようにcommons-logging依存しているjar毎に、1個づつexcludeする作業が不要なのです!!
リファレンスによると、この設定はコンパイルエラーがでる場合に限り、excludeされない事もあるようです。

これができるおかげで、以下ができます。

  • このjarは不要ですと明示できる。
  • 仮に後から他人がjarをincludeしても自動で除外される。

管理も楽で、且つ他人がjarを追加した際にexcludeし忘れて除外jarが復活する事故も防げます!

今回はここまでです。



javaのビルドをgradleで行う:調査編1:maven・SBTとの違い - treeのメモ帳
javaのビルドをgradleで行う:調査編2:依存から1行で特定jarを除外! - treeのメモ帳
javaのビルドをgradleで行う:調査編3:seasar系の依存の注意点 - treeのメモ帳
javaのビルドをgradleで行う:調査編4:Groovy Librariesの罠 - treeのメモ帳


javaのビルドをgradleで行う:実践編1:jsとcssのcombineとminify - treeのメモ帳
javaのビルドをgradleで行う:実践編2:静的ファイルの圧縮 - treeのメモ帳
javaのビルドをgradleで行う:実践編3:jspの文字列置換(ReplaceTokens) - treeのメモ帳
javaのビルドをgradleで行う:実践編4:あれどうやるの?の疑問と自己解決 - treeのメモ帳
javaのビルドをgradleで行う:実践編5:マルチプロジェクト時のprovidedCompileについて - treeのメモ帳
javaのビルドをgradleで行う:実践編6:高速に実用的な実行可能jarを生成する - treeのメモ帳
Building and Testing With Gradle

Building and Testing With Gradle

Gradle Effective Implementation Guide

Gradle Effective Implementation Guide