Gradle調査シリーズその2です〜
javaのビルドをgradleで行う:調査編1:maven・SBTとの違い - 文系プログラマによるTIPSブログ
今回は依存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との違い - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:調査編2:依存から1行で特定jarを除外! - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:調査編3:seasar系の依存の注意点 - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:調査編4:Groovy Librariesの罠 - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編1:jsとcssのcombineとminify - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編2:静的ファイルの圧縮 - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編3:jspの文字列置換(ReplaceTokens) - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編4:あれどうやるの?の疑問と自己解決 - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編5:マルチプロジェクト時のprovidedCompileについて - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編6:高速に実用的な実行可能jarを生成する - 文系プログラマによるTIPSブログ