Gradleを使用してリソース、設定ファイルをjarに追加します


91

gradleを使用して、jarに構成ファイルやその他のリソースを追加するにはどうすればよいですか?

私のプロジェクト構造:

src / main / java / com / perseus / .. --- Javaパッケージ(ソースファイル)

src / main / java / config / *。xml --- Spring設定ファイル

予期されるjar構造:

com / perseus / .. --- Javaパッケージ(クラスファイル)

config / *。xml --- Spring設定ファイル

回答:


80

リソース用にディレクトリを追加する方法を検索しているこの投稿に出くわしました。私は誰かに役立つかもしれない解決策を見つけました。これを取得するための最終的な設定は次のとおりです。

sourceSets {
    main {
        resources {
            srcDirs "src/main/resources", "src/main/configs"
        }
    }
}

5
これは、受け入れられた回答よりもはるかに単純な解決策です
Stewart

70

構成ファイルをからsrc/main/javaに移動しますsrc/main/resources


1
私にとってはうまくいき、これを達成するための最も簡単で「最も正しい」方法のように見えます。
EM-Creations

この回答は解決策ではなく回避策を示唆しており、Gradleが解決策を提供します。
ひどいオタマジャクシ

@TerribleTadpoleこれは正しい解決策です。他のすべては回避策です。
jannis

63

皆さん、ありがとうございます。私は既存のプロジェクトをGradleに移行していましたが、プロジェクトの構造をそれほど変更することは好きではありませんでした。

私はそれを理解しましたが、この情報は初心者に役立つかもしれないと思いました。

これが私の 'build.gradle'からのサンプルタスクです。

version = '1.0.0'

jar {
   baseName = 'analytics'
   from('src/main/java') {
      include 'config/**/*.xml'
   }

   manifest {
       attributes 'Implementation-Title': 'Analytics Library', 'Implementation-Version': version
   }
}

34
ソースセットを再構成する方が正確です。のようなものsourceSets.main.resources { srcDirs = ["src/main/java"]; exclude "**/*.java" }
Peter Niederwieser 2014

1
ありがとう@PeterNiederwieser !! シャドウを使用して構築していた実行可能jarにlog4j.xmlファイルを含めようとしました。私も古いプロジェクトを扱っていて、ディレクトリ構造を簡単に変更できませんでした。あなたの提案はまさに私が必要としたものでした!! :D
ピコ

@PeterNiederwieser-Javaプラグインのドキュメントで、リソースが* .javaを除外するようにすでに定義されていることに気付きました。「リソースのみを含み、リソースソースディレクトリにある.javaファイルを除外します。」
Joe Bowbeer 2015年

25

デフォルトでは、追加するファイル src/main/resources jarに含まれます。

何らかの理由でその動作を変更する必要がある場合は、を設定することで変更できますsourceSets

ドキュメントのこの部分にはすべての詳細があります


4
コンテンツのリソースディレクトリ.../resources/なく、コンテンツのみが含まれている理由を知っいますか?
sargas

@sargasすべてのコンテキストを簡単に含めることができる新しい質問を開始する必要があります。コメントセクションで多くの情報を取得するのは困難です:(
geoand

18

私は同じ問題に出くわしました。JavaパッケージにPNGファイルがあり、ソースとともに最終的なJARにエクスポートされなかったため、起動時にアプリがクラッシュしました(ファイルが見つかりません)。

上記の回答のどれも私の問題を解決しませんでしたが、Gradleフォーラムで解決策を見つけました。私は自分のbuild.gradleファイルに以下を追加しました:

sourceSets.main.resources.srcDirs = [ "src/" ]
sourceSets.main.resources.includes = [ "**/*.png" ]

Gradleにsrcフォルダー内のリソースを探し、PNGファイルのみを含めるように指示します。

編集: Eclipseを使用している場合、これにより実行構成が壊れmain class not found、プログラムを実行しようとするとエラーが発生することに注意してください。それを修正するために、私が見つけた唯一の解決策はres/、たとえばイメージを別のディレクトリに移動し、srcDirsではなくとして設定することですsrc/


2
+=演算子を使用して、既存のsourceSets.main.resources.srcDirs += [ "src/main/java" ]
ディレクトリに自分のディレクトリ

3

src / main / resourcesの下のパスは、リソースにアクセスする.classファイルのパッケージパスと一致する必要があることに注意してください。ここで私の答えを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.