どのように私はGradleのビルドのプロジェクトで複数のEJB jarファイルを作成するのですか?
質問
私は、マルチプロジェクトのビルドを持っており、プロジェクトのそれぞれに私は、個々の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 の