Gradle将项目部署到耳朵

时间:2015-08-12 09:45:46

标签: java web-applications gradle weblogic ear

我的项目有以下结构

--MyPrj.ear
  --APP-INF
    --src
    --lib
  --META-INF
    --application.xml
    --weblogic-application.xml
  --WEB_MAIN
    --assets
    --WEB-INF
      --conf
      --web.xml
      --weblogic.xml

我想部署到PRJ.ear文件,结构如下:

--MyPrj.ear
  --APP-INF
    --classes
    --lib
  --META-INF
    --application.xml
    --weblogic-application.xml
  --WEB_MAIN
    --assets
    --WEB-INF
      --conf
      --web.xml
      --weblogic.xml

这是我的耳朵配置:

ear {
    baseName 'PRJ'
    appDirName 'APP-INF/src'
    libDirName 'APP-INF/lib'

    ear{
        into("META-INF"){
            from("META-INF") {
                exclude 'application.xml'
            }
        }
        into("WEB_MAIN") {
            from ("WEB_MAIN")
        }
    }

    deploymentDescriptor {
        webModule 'WEB_MAIN', '/'
        applicationName = "PRJ"
    }
}

我的实际结果:

--MyPrj.ear
  --APP-INF
    --lib
  --com
  --META-INF
    --application.xml
    --weblogic-application.xml
  --WEB_MAIN
    --assets
    --WEB-INF
      --conf
      --web.xml
      --weblogic.xml

无法生成APP-INF/classes

2 个答案:

答案 0 :(得分:5)

要包含.ear文件,您应修改build.gradle,方法是向apply plugin: 'ear'添加ear并按照this guide中的说明正确填写wideploy块。< / p>

此外,部署过程的神奇之处得到了很好的解释here,不久之后就是在Gradle中使用{{1}}工具。 您可能还需要查看here以查找有关此脚本的更详细信息。

答案 1 :(得分:2)

我将从一个观察开始:构建脚本中的ear的两个实例都指向同一个任务。没有必要两次引用ear,即into声明可以升级一级。

首先,将文件夹APP-INF/src添加为源集。这将导致编译的类被添加到EAR的根目录,因此您必须排除这些。然后你必须告诉ear任务将已编译的类复制到EAR中的APP-INF/classes目录:

// Make sure the source files are compiled.
sourceSets {
    main {
        java {
            srcDir 'APP-INF/src'
        }
    }
}

ear {
    baseName 'PRJ'
    libDirName 'APP-INF/lib'

    into("META-INF") {
        from("META-INF") {
            exclude 'application.xml'
        }
    }
    into("WEB_MAIN") {
        from("WEB_MAIN")
    }

    deploymentDescriptor {
        webModule 'WEB_MAIN', '/'
        applicationName = "PRJ"
    }

    // Exclude the compiled classes from the root of the EAR.
    // Replace "com/javathinker/so/" with your package name.
    eachFile { copyDetails ->
        if (copyDetails.path.startsWith('com/javathinker/so/')) {
            copyDetails.exclude()
        }
    }

    // Copy the compiled classes to the desired directory.
    into('APP-INF/classes') {
        from(compileJava.outputs)
    }

    // Remove empty directories to keep the EAR clean.
    includeEmptyDirs false
}