我正在尝试使用Gradle组装 ear ,application.xml
包含一些非ejb模块。依赖项目档案是使用{basename}-{version}.{extension}
标准生成的,因此看起来像,例如subproject-0.2.6.rar
。但是,由于其中一些项目需要标记为java或连接器模块,因此我遇到了解决正确文件的问题。
这就是构建脚本的样子:
apply plugin: 'ear'
dependencies {
deploy project(':EJB-Project')
deploy project(':Commons')
deploy project(':UpdateManager')
earlib 'net.sf:jasperreports:unknown'
earlib 'org.apache.axis:axis:1.4'
}
ear {
deploymentDescriptor {
applicationName = 'EnterpriseProject'
module('Commons.jar', 'java')
module('UpdateManager.rar', 'connector')
}
// Remove the version postfix from archived files
rename(/(.*)-${version}(.)/, /$1$2/)
}
jboss-deployment-structure.xml
在没有版本说明符的情况下声明了子部署节点中的存档。
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
...
<sub-deployment name="EJB-Project.jar">
<dependencies />
<exclusions />
</sub-deployment>
<sub-deployment name="Commons.jar">
<dependencies />
<exclusions />
</sub-deployment>
...
ear任务中的rename方法成功地从deploy
配置重命名库,但Gradle添加了依赖项,这些依赖项未通过module(String path, String identifier)
自动显式添加,其原始名称为ejb模块:< / p>
<module>
<ejb>EJB-Project-4.5.2.jar</ejb>
</module>
我希望以一种干净的方式解决这个问题 - 例如,在模块部分引用项目本身,而不是指定文件名(及其扩展名)并为JBoss生成部署xml,但是我是不知何故卡住了。我希望删除所有版本字符串,或保留所有版本字符串。
答案 0 :(得分:0)
有一个插件,可以生成JBoss部署结构on GitHub。 由于我没有找到解决方法的干净方法,我只是实现了插件中缺少的功能,并且所有者合并了它们。
答案 1 :(得分:0)
我在 gradle 6.8 中解决了类似的问题:
我从这里开始:
plugins {
id 'ear'
}
dependencies {
deploy 'org.cpp.pp:dmReports:5.04.01-2'
deploy project(':reporting-transpoLib')
}
ear {
deploymentDescriptor {
module('dmReports-5.04.01-2.jar', 'java')
module("reporting-transpoLib-${project.version}.jar", 'java')
}
}
它生成了一个包含带有版本的 jar 和带有版本的部署描述符的耳朵。
但我还有第二场战争,在它的部署描述符中指定了对 dmReports 的依赖。
对于通过这个耳朵部署的每个新版本的 dmReports,我还必须更新 war 部署描述符(依赖项部分)——这不太好。
我需要从耳朵和战争部署描述符中删除 dmReports 版本。
所以我改成了这个耳朵:
plugins {
id 'ear'
}
configurations {
dmReports
reportingTranspoLib
}
dependencies {
dmReports 'org.cpp.pp:dmReports:5.04.01-2'
reportingTranspoLib project(':reporting-transpoLib')
}
// copyToLib task copies the dependencies and rename them (remove version) in a separate
// folder: ${buildDir}/lib. This folder will be used as input for deploy configuration
task copyToLib {
dependsOn(':reporting-transpoLib:build')
doFirst {
def configNames = [ 'dmReports', 'reportingTranspoLib']
configNames.each { configName ->
configurations.getByName(configName).resolvedConfiguration.resolvedArtifacts.each { artifact ->
project.copy {
from artifact.file
into "${buildDir}/lib"
rename { "${artifact.name}.${artifact.extension}" }
}
}
}
}
}
// the output of copyToLib task (folder ${buildDir/lib}) is taken and used by configuration deploy
dependencies {
deploy files("${buildDir}/lib")
}
ear {
dependsOn(copyToLib)
// from(copyToLib)
deploymentDescriptor {
module('dmReports.jar', 'java')
module("reporting-transpoLib.jar", 'java')
}
}
所以我获得了一个包含没有版本的 jar 和没有版本的部署描述符的耳朵。 非常有用。