我的项目有以下结构
--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
答案 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
}