Gradle打ear包配置

2015-07-16 16:09

一个Web项目,平时在uat环境发布一直是war包,但在上线前得知生产环境发布时必须是ear包。
那么在gradle中怎么配置,才能打出ear包呢?

ear包的结构

app.ear
   | ejb.jar         // ejb-jar包
   | other.jar       // 普通的jar包
   | webapp.war      // war包
   |
   |—META-INF
     application.xml // EAR描述文件

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"  version="1.4">
    <display-name>JBossAtWorkEAR</display-name>
    <module>
        <web>
            <web-uri>webapp.war</web-uri>
            <context-root>/jaw</context-root>
        </web>
    </module>
</application>

手动打包

具备了以上信息后,就可以手动打包了:

jar cf your_application.ear your_war.war META-INF\application.xml

不过,我们既然使用了gradle,就应该用gradle来完成这个事情。

gradle配置

为了对项目结构影响最小,我们在项目目录下新建一个ear目录,在ear目录下新建一个build.gradle文件。

settings.gradle

将子项目include进来:

include 'ear'

build.gradle

apply plugin: 'ear'

dependencies {
    deploy project(path: rootProject.path, configuration: 'archives')
}

ear {
    archiveName = "${rootProject.name}.ear"
    deploymentDescriptor {
        displayName = rootProject.name
    }
}

如此这般之后,执行gradle ear即可在ear/build/libs下创建出xxx.ear来。
具体示例代码请看Github