どのように私はGradleのビルドのプロジェクトで複数のEJB jarファイルを作成するのですか?

StackOverflow https://stackoverflow.com/questions/3627791

  •  26-09-2019
  •  | 
  •  

質問

私は、マルチプロジェクトのビルドを持っており、プロジェクトのそれぞれに私は、個々のEJB成果物として、srcの残りの部分とは別にアップパッケージ化する必要がメインのsrcツリー内の複数のパッケージを持っています:

com/foo/ejb/ejb1
com/foo/ejb/ejb2
...

は、各プロジェクト(0またはいくつか)におけるこれらのEJBの任意の数が存在し得ます。 私の質問は、どのように私は缶は、プロジェクトごとに、定期的にコンパイル/ jarファイルの後に別の成果物として、これらの各ジャーというタスクを作成するのですか?即ち

:私はプロジェクトごとに以下の成果物で終わるので、
project.jar (usual Java classes) 
ejb1.jar (MyEjb1Home/Remote/Bean.class, META_INF/[descriptors])
ejb2.jar (MyEjb2Home/Remote/Bean.class, META_INF/[descriptors])
...

タスク(複数可)、私は、各プロジェクトに共有することができるものでなければなりません(これはおそらく、ルートプロジェクトで定義されている)、それは自動的にEJB srcを見つけて、明示的にサブプロジェクトでEJBを定義することなく、それぞれのjarファイルを生成します。おそらくプロパティセットEJBを持っているサブプロジェクトを絞り込むために「containsEjbs」)。

私は(。* com.foo.ejb)のsrcパッケージをつかむためにfiletreeを使用しての線に沿って考えた後、反復およびJar-INGのだ - が、そのこれを行うにはどのようにジャー-INGのタスクのコンテキストで私はとのトラブルを抱えているものですこれます。

任意の助けてくれてありがとう、クリスます。

役に立ちましたか?

解決 2

私は次のことをやってしまいました。 [ルート] /build.gradle

afterEvaluate { project ->
    if (project.hasProperty('containsEjbs'))
    {
        def basePath = '/com/foo/ejb'
        def classesDir = project.sourceSets.main.classesDir
        def ejbRootClassesDir = file(classesDir.getPath() + basePath)
        def srcFileDirs = project.sourceSets.main.java.srcDirs.collect { file(it.getPath() + basePath) }.findAll { it.exists() && it.isDirectory() }
        def ejbDirs = srcFileDirs.collect { it.listFiles() }.flatten()
        def ejbs = ejbDirs.findAll { it.listFiles().findAll { f -> f.name == 'META-INF'} }
        ejbs.each { file ->
            task "jarEjbFor_$file.name" (type: Jar, dependsOn:classes) {
                baseName = "$file.name"
                classifier = 'ejb'
                from fileTree(file).include('META-INF/**')
                into ("$basePath/$file.name")
                {
                    from fileTree( ejbRootClassesDir.getPath() + "/$file.name" )
                }
            }
        }
    }

だから、すべてのプロジェクトはプロパティ「containsEjbs =真」を持っている場合、タスクは各EJBパッケージに追加され、各それぞれの(サブ)プロジェクトに '/ COM / fooの/ EJBの下にあります。私たちは、そう、あなたのセットアップに必要な微調整があるかもしれない、クラスと同じソースツリー内の記述子をMETA-INFを格納します。

他のヒント

あなたは、単に種類の新しいタスクを定義することができます。jar

task('ejb1', type: Jar) {
  //describe jar contents here as a CopySpec
}

このタスクは自動的に「組み立て」ビルドフェーズで実行する必要があります。 // WWW:利用可能な機能の詳しい説明はのhttpであります.gradle.org / 0.9-RC-1 /ドキュメント/ユーザガイドの/ userguide_single.html#artifact_management

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top