Java 使用Gradle构建EAR文件:如果WebModule是快照依赖项,如何配置它们?
我使用Gradle从外部依赖项创建EAR文件,如下所示:Java 使用Gradle构建EAR文件:如果WebModule是快照依赖项,如何配置它们?,java,gradle,build.gradle,wildfly,ear,Java,Gradle,Build.gradle,Wildfly,Ear,我使用Gradle从外部依赖项创建EAR文件,如下所示: ... dependencies { ... deploy group: 'xx.xxx.xxx.xxx', name: 'war-name', version: '0.3.0', ext: 'war' ... } ear { deploymentDescriptor { webModule("war-name-0.3.0.war", "/war-name")
...
dependencies {
...
deploy group: 'xx.xxx.xxx.xxx', name: 'war-name', version: '0.3.0', ext: 'war'
...
}
ear {
deploymentDescriptor {
webModule("war-name-0.3.0.war", "/war-name")
}
}
...
ear {
deploymentDescriptor {
webModule("war-name-" + TIMESTAMP_OF_SNAPSHOT + ".war", "/war-name")
}
}
...
ear配置实现了在HTTP端点的路径中不包含版本号的目标。此解决方案在中提出
到目前为止,一切正常。但是,如果我对具有快照版本的WAR文件执行相同操作,则webModule的配置将不再有效,因为WAR文件的文件名包含快照的时间戳,而不是与版本完全相同的调用:
...
dependencies {
...
deploy group: 'xx.xxx.xxx.xxx', name: 'war-name', version: '0.3.0-SNAPSHOT', ext: 'war'
...
}
ear {
deploymentDescriptor {
// This fails, because the war file does not have this exact name, but instead contains
// the timestamp of the SNAPSHOT's buildtime.
webModule("war-name-0.3.0-SNAPSHOT.war", "/war-name")
}
}
...
如果执行上述操作,则生成的application.xml
包含以下条目:
<module>
<web>
<web-uri>war-name-0.3.0-20200714.134805-4.war</web-uri>
<context-root>war-name-0.3.0-20200714.134805-4</context-root>
</web>
</module>
<module>
<web>
<web-uri>war-name-0.3.0-SNAPSHOT.war</web-uri>
<context-root>/war-name</context-root>
</web>
</module>
然而,我有点不知道如何找到封装在EAR中的确切快照版本的时间戳。有什么想法吗?谢谢你的帮助 现在我自己已经找到了解决办法。 您可以通过搜索配置来查找已使用的War文件:
ear {
// Since we use SNAPSHOT-Versions sometimes (e.g. for integration testing),
// We cannot just use the version of the war files when specifying the webModules.
// Instead, we have to find out the exact filename of the used war-file (which will have an
// arbitrary timestamp in the case of SNAPSHOT Versions).
final def actualWarFileUsed = configurations.getByName("deploy")
.filter{ final dep -> dep.name.contains("war-name")}
.getSingleFile()
.name
deploymentDescriptor {
webModule(actualWarFileUsed, "/war-name")
}
}
也许这对有同样问题的人有帮助
ear {
// Since we use SNAPSHOT-Versions sometimes (e.g. for integration testing),
// We cannot just use the version of the war files when specifying the webModules.
// Instead, we have to find out the exact filename of the used war-file (which will have an
// arbitrary timestamp in the case of SNAPSHOT Versions).
final def actualWarFileUsed = configurations.getByName("deploy")
.filter{ final dep -> dep.name.contains("war-name")}
.getSingleFile()
.name
deploymentDescriptor {
webModule(actualWarFileUsed, "/war-name")
}
}