質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.90%

Gradle - buildの際の特定クラスの除外

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 14K+

score 111

gradleを利用してプログラムをビルドしています(gradle build)が、その際に特定のクラスを含まないようにするにはどのようにしたらよいでしょうか?(build.gradleファイルに記述、またはgradleコマンドにオプション等)
検索の結果gradleのdocsの51章内、【51.4.7. 推移的な依存関係の除外】などに辿り着きましたが、前提知識に乏しく、organizationが何か等からわからず立ち止まってしまっています。

例えばパッケージhoge.piyo内のHoge.javaをビルドから除外したい場合、どのようにするとよいでしょうか。
IDEにEclipseを利用していますが、Eclipseで該当を右クリック->Build Path->Excludeしても、gradle buildの際には除外されませんでした。

どうぞよろしくお願い致します。


argiusさんより頂いたご回答を参考に進めています。
後出しの情報で申し訳ないのですが、下記のようなマルチプロジェクトの構成でプログラムを作っており、

  • piyo_root : ルートプロジェクト(ベース)
  • piyo_sub1 : サブプロジェクト1
  • piyo_sub2 : サブプロジェクト2
  • piyo_sub3 : サブプロジェクト3

たとえば、この中の、下記を除外したいと考えています。

  • piyo_sub1
    └src/main/java
     └hoge/piyo/Hoge.java
  • piyo_sub2
    └src/main/java
     └hoge/hogehoge/HogeHoge.java

ご回答頂いた通りに、各サブプロジェクト内のgradleファイルに追記したところ、生成されたjarをtvfでみても、
2373 Tue May 31 17:07:44 JST 2016 hoge/piyo/Hoge.class
のような感じで含まれています(私のtvfへの認識がおかしかったらすみません)。
この場合、サブプロジェクトのgradleファイルではなく、ベースのプロジェクトのgradleファイルに記述すべきなのかと思い、今度はpiyo_root内のgradle.buildのsubProjectsプレースホルダ内に頂いた記述を追記しましたが、やはりjar tvfの結果に同様に対象が含まれてしまいます。
ほか、javaのビルドをgradleで行う:調査編2:依存から1行で特定jarを除外! - 文系プログラマによるTIPSブログを参考としましたが、こちらもうまくいきません。
引き続き知見を頂けますでしょうか。


さらに追記:
本当に基本的なことでした。各サブプロジェクトのgradleファイルにsourceSetsでexclude対象を記述し、ルートのプロジェクトで、gradle clean後にgradle buildにて、jarから対象のファイルが除外されていることを確認できました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

こうすれば良いみたいです。

下記のコードをbuild.gradleに追加してみてください。
Hoge.javaがコンパイルエラーになっていても、無視してJarを作ってくれます。

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
            exclude 'hoge/piyo/Hoge.java'
       }
   }
}

...

Eclipseで該当を右クリック->Build Path->Excludeしても、gradle buildの際には除外されませんでした。 

Eclipseのビルド設定(exclude設定が含まれる)はGradleとは何の関連付けもされていませんので、それでは反映されません。

★これ↓は設定がおかしくなるかもなので注意
逆に、上記の設定をした上でEclipseプラグインで反映させると、不完全ながらEclipseのビルドパスに反映されます。
ビルドパスがおかしなことになるかもなので注意してください。

...

参考リンク:

How can I exclude certain java files from being compiled? - Old Forum - Gradle Forums  
https://discuss.gradle.org/t/how-can-i-exclude-certain-java-files-from-being-compiled/5287

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/31 17:41

    ご回答ありがとうございます。質問情報を追記しましたので、もしよろしければ引き続きご助言頂けますでしょうか。
    > (★これ↓は設定がおかしくなるかもなので注意)
    こちら、ありがとうございます。覚えておきます。

    キャンセル

  • 2016/05/31 18:12

    マルチプロジェクトはあまりよく分かっていませんが、
    同様の構成を単純な設定で構築しビルドしたところ、
    (settings.gradleにinclude 'piyo_sub1', 'piyo_sub2', 'piyo_sub3'を記載しただけ)

    piyo_root/piyo_sub1/build/libs/piyo_sub1.jarには、
    hoge/piyo/Hoge.classは含まれていませんでした。
    (すべてのbuild.gradleは同じにしています。)
    少なくともpiyo_sub1/build.gradleにsourceSetsを記載していれば除外されました。

    あとは依存関係の設定が何かしら影響しているのかも知れませんが。
    最終的な出力イメージはどのようなものでしょうか。

    それか、いったんcleanしてから再度buildしてみるとどうなりますか?

    キャンセル

  • 2016/06/01 13:28

    > それか、いったんcleanしてから再度buildしてみるとどうなりますか?
    この通りでした。基本的な手順を忘れていました……。大変失礼致しました。
    ご丁寧に検証もして頂き、本当にありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.90%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る