Java gradle build<;配置名称>;:ear和war的不同包装(gradle v2.3)
我想使用gradle v2.3配置以两种方式打包我的应用程序:Java gradle build<;配置名称>;:ear和war的不同包装(gradle v2.3),java,gradle,war,ear,Java,Gradle,War,Ear,我想使用gradle v2.3配置以两种方式打包我的应用程序: ear在ear的lib目录中包含所有lib,在ear中包含多个WAR(使用providedCompile和earlib声明的DEP) 多个war文件,WEB-INF/lib中的每个war中都包含lib(用compile声明的DEP) 如果每次需要不同的打包时都修改build.gradle文件,则可以执行这两项任务中的每一项。 我想通过使用gradlebuild使用配置来选择JAR是否包含在war文件中 基于帮助,我编写了以下文件(这
gradlebuild
使用配置来选择JAR是否包含在war文件中
基于帮助,我编写了以下文件(这是为其中一场战争编写的):
问题在于命令gradle buildpackWar
和gradle buildpackEar
会产生不包括来自Common
项目的JAR的同等战争。
如果我将packEar的配置从providedCompile
更改为compile
,两者都会产生包含JAR的war
附加信息:我试着使用compile/providedCompile中的extenddfrom,但似乎没有任何影响。我包括了buildpackWar
和buildpackEar
方法,但这两种方法都不起作用(可能是我用错了它们)
谢谢你的回答
致以最良好的祝愿,
Zigacompile
和providedCompile
是它们自己的配置,因此您将公共项目添加到这些配置中,而不是packWar
和packEar
配置中。这样的事情应该行得通:
项目mywar
项目myear
它将产生三个主要工件:
mywar.war
,它不包含shareable
中的任何依赖项(如common
)
mywar standalone.war
,它在shareable
myear.ear
,它在根目录中包含mywar.war
(技术上是mywar.jar
)以及/lib
下的mywar
项目中的shareable
中的依赖项(例如common
)
使用我提供的信息,我成功地生成了一个工作配置,它只需要一些小的调整。这是文件
ACL war
apply plugin: 'war'
apply plugin: 'eclipse-wtp'
configurations {
shareable
publishedWar // need this so war gets placed in ear instead of jar,
// using archives puts both wars in ear
}
dependencies {
providedCompile project(':Common');
shareable project(':Common');
}
war {
baseName = war.baseName + '-thin'
classpath = war.classpath
}
task standaloneWar(type: War, dependsOn: war) {
baseName = project.name // sharable war's name without modifications
classpath = war.classpath + configurations.shareable
}
artifacts {
archives standaloneWar
publishedWar war // to be included in ear
}
注:
如果提供了编译项目(':Common')代码>被省略,这将不会
编撰
我添加了战争{…},这样我就可以重新命名这场战争了
包含任何依赖项,并具有
包含名称中没有修改的依赖项
耳朵
apply plugin: 'ear'
evaluationDependsOn ':ACL' // probably not needed
dependencies {
deploy project(path: ':ACL', configuration: 'publishedWar')
earlib project(path: ':ACL', configuration: 'shareable')
}
ear {
deploymentDescriptor {
webModule ('ACL-thin.war', "${project.name}/ACL") // set context root
}
}
注:
如果未应用publishedWar配置,则将jar放置在ear中
如果使用存档,两场战争都能在耳朵里找到位置
如果您使用Eclipse插件,考虑更改<代码> AcLyb项目(路径::ACL,配置:“可共享”)<代码> >更改为<代码> Endob Project(':Cudio),或者您将不得不修改Eclipse中的部署程序集(战争将包含在Eclipse 的EAR LIB文件夹中)
apply plugin: 'ear'
apply plugin: 'java'
evaluationDependsOn ':mywar'
repositories {
jcenter()
}
dependencies {
deploy project(':mywar')
earlib project(path: ':mywar', configuration: 'shareable')
}
apply plugin: 'war'
apply plugin: 'eclipse-wtp'
configurations {
shareable
publishedWar // need this so war gets placed in ear instead of jar,
// using archives puts both wars in ear
}
dependencies {
providedCompile project(':Common');
shareable project(':Common');
}
war {
baseName = war.baseName + '-thin'
classpath = war.classpath
}
task standaloneWar(type: War, dependsOn: war) {
baseName = project.name // sharable war's name without modifications
classpath = war.classpath + configurations.shareable
}
artifacts {
archives standaloneWar
publishedWar war // to be included in ear
}
apply plugin: 'ear'
evaluationDependsOn ':ACL' // probably not needed
dependencies {
deploy project(path: ':ACL', configuration: 'publishedWar')
earlib project(path: ':ACL', configuration: 'shareable')
}
ear {
deploymentDescriptor {
webModule ('ACL-thin.war', "${project.name}/ACL") // set context root
}
}