我想使用gradle v2.3配置以两种方式打包我的应用程序:
如果我每次想要不同的包装时修改build.gradle文件,我都可以执行这两项任务。
我想使用配置来选择 war 是否包含在 war 文件中,或者不使用gradle build<ConfigurationName>
。
基于帮助和StackOverflow post How to use uploadConfigurationName and buildConfigurationName我编写了以下文件(这是针对其中一场战争):
apply plugin: 'war'
configurations {
packEar
packWar
}
dependencies {
configurations.packEar {
providedCompile project(':Common') // jars will be included using earlib
}
configurations.packWar {
compile project(':Common') // jars included in war
}
}
artifacts {
packWar war
packEar war
}
问题,命令gradle buildpackWar
和gradle buildpackEar
生成相等 战争,但不包括来自Common
项目的jars 。
如果我将packEar的配置从providedCompile
更改为compile
,则会产生包含 jar 的战争。
其他信息:我尝试使用extendFrom compile / providedCompile
,但似乎没有任何影响。我添加了buildpackWar
和buildpackEar
方法,但它也没有用(可能是因为我以错误的方式使用了这些方法)。
感谢您的回答!
祝你好运, Ziga
答案 0 :(得分:2)
compile
和providedCompile
是他们自己的配置,因此您需要将Common项目添加到那些,而不是packWar
和packEar
配置。这样的事情应该有效:
mywar
apply plugin: 'war'
apply plugin: 'java'
repositories {
jcenter()
}
configurations {
shareable
}
dependencies {
shareable project(':common')
}
task standaloneWar(type: War, dependsOn: war) {
baseName = war.baseName + '-standalone'
classpath = war.classpath + configurations.shareable
}
artifacts {
archives standaloneWar
}
myear
apply plugin: 'ear'
apply plugin: 'java'
evaluationDependsOn ':mywar'
repositories {
jcenter()
}
dependencies {
deploy project(':mywar')
earlib project(path: ':mywar', configuration: 'shareable')
}
它将产生三个主要的工件:
mywar.war
,其中不包含shareable
中的任何依赖项(如common
)mywar-standalone.war
,其中包含shareable
myear.ear
,其中根目录中包含mywar.war
(技术上为mywar.jar
),shareable
下mywar
项目中的/lib
依赖项}(例如common
)答案 1 :(得分:2)
使用Ben Navetta提供的信息我设法生成了一个有效的配置,只需要进行一些小的调整。这是文件
ACL战争
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
}
注意:
providedCompile project(':Common');
,则不会
编译<强> 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
}
}
注意:
earlib project(path: ':ACL', configuration: 'shareable')
更改为earlib project(':Common')
或者您必须在eclipse中修改部署程序集( war 将被包含在 eclipse中 ear的lib 文件夹