如何在 Gradle 构建项目中创建多个 ejb jar?
与 src 的其余部分分开打包为单独的 EJB 工件:
com/foo/ejb/ejb1
com/foo/ejb/ejb2
...
我有一个多项目构建,并且在每个项目中,主 src 树中都有几个包,这些包需要 每个项目(0 个或多个)。 我的问题是,如何创建一个任务,可以在每个项目中在常规编译/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 并为每个项目生成一个 jar,而无需显式定义子项目中的 EJB(但可能使用属性集“containsEjbs”来缩小具有 EJB 的子项目的范围)。
我正在考虑使用文件树来获取 src 包(com.foo.ejb.*),然后迭代和 Jar-ing - 但它如何在任务的上下文中执行此 Jar-ing ,这就是我遇到麻烦了。
感谢您的帮助,克里斯。
I have a multi-project build and in each of the projects I have several packages in the main src tree which need to be packaged up separately from the rest of the src as individual EJB artifacts:
com/foo/ejb/ejb1
com/foo/ejb/ejb2
...
There can be an arbitrary number of these EJBs in each project (0 or several).
My question is, how do I create a task that can, per project, Jar each of these as separate artifacts after the regular compile/jar? I.e. So I end up with following artifacts for each project:
project.jar (usual Java classes)
ejb1.jar (MyEjb1Home/Remote/Bean.class, META_INF/[descriptors])
ejb2.jar (MyEjb2Home/Remote/Bean.class, META_INF/[descriptors])
...
The task(s) should be something I can share to each project (so probably defined in root project) and that will automatically find EJB src and generate a jar for each, without having to explicitly define the EJBs in the subprojects (but perhaps a property set "containsEjbs" to narrow down subprojects that have EJBs).
I'm thinking along the lines of using a filetree to grab the src package (com.foo.ejb.*) and then iterating and Jar-ing - but its how to do this Jar-ing in the context of Tasks which is what I'm having trouble with.
Thanks for any help, Chris.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以简单地定义一个类型为:Jar 的新任务。
该任务应在“组装”构建阶段自动运行。可用功能的完整描述位于 http://www .gradle.org/0.9-rc-1/docs/userguide/userguide_single.html#artifact_management
You can simply define a new Task of Type: Jar
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
我最终做了以下事情。在 [root]/build.gradle 中:
因此,如果任何项目具有属性“containsEjbs=true”,则会为每个相应(子)项目中“/com/foo/ejb”下找到的每个 ejb 包添加一个任务。我们将带有描述符的 META-INF 存储在与类相同的源树中,因此您的设置可能需要进行调整。
I ended up doing the following. In [root]/build.gradle:
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.