我有一个多项目构建并且在每个项目的我在主SRC树几个包需要被从SRC作为单独的EJB工件的其余部分分开包装起来:

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

有可在这些EJB的每个项目(0或几种)的任意数。 我的问题是,如何创建一个任务就可以了,每个项目,每个罐子的这些作为独立的文物常规的编译/罐后?即所以我结束了以下工件为每个项目:

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(但或许一个属性组“containsEjbs”来缩小具有的EJB子项目)。

我一起用文件树抢SRC包装的思路思考,然后迭代和将罐荷兰国际集团(com.foo.ejb。*) - 但如何做到这一点的Jar-ING在任务的上下文这是我在使用什么麻烦。

感谢您的帮助,克里斯。

有帮助吗?

解决方案 2

I ended up doing the following. In [root]/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" )
                }
            }
        }
    }

So if any projects have a property 'containsEjbs=true', then a tasks is added for each ejb package found under '/com/foo/ejb' in each respective (sub)project. We store META-INF with descriptors in same source tree as classes, so there may be tweaks needed for your set up.

其他提示

You can simply define a new Task of Type: Jar

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

This task should automatically be run in the 'assemble' build phase. Full description of features available is at http://www.gradle.org/0.9-rc-1/docs/userguide/userguide_single.html#artifact_management

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top