Gradle:战争任务具有冲突的包含/排除

问题描述 投票:0回答:2

我正在尝试使用 Gradle 构建一个 war 文件,但遇到了一个问题,即排除一个目录并包含另一个恰好具有相同名称但父目录不同的目录。

请注意,在下面的第一个代码示例中,最终的

css/
文件中都没有包含
war
目录 - 我认为是因为 Gradle 认为我想排除名为 css/ 的任何目录
,无论其名称如何绝对路径。

基本上我想排除

src/main/webapp/css

 并包含 
build/tmp/css
 因为后者包含缩小的代码。我怎样才能实现这个目标?我尝试过以各种方式指定绝对路径,但没有取得任何成功。

war { dependsOn minify from('build/tmp/') { include ('css/') } exclude('WEB-INF/classes/', 'css/') }

如果我不像这样排除

css/

war { dependsOn minify from('build/tmp/') { include ('css/') } exclude('WEB-INF/classes/') }

然后结果是缩小和非缩小的代码都包含在内。

java groovy build build-process gradle
2个回答
6
投票
我不确定为什么你在 build.gradle 中排除

WEB-INF/classes/css

 而不是 
src/main/webapp/css
,但是复制缩小的 CSS 文件而不是原始文件是通过以下方式实现的:

apply plugin: 'war' war { // dependsOn 'minify' from 'src/main/webapp' exclude 'css' // or: "exclude 'WEB-INF/classes/css'" from('build/tmp/css') { include '**/*.css' into 'css' // or: "into 'WEB-INF/classes/css'" } }
    

0
投票
我有类似的问题,我必须从 src/main/webapp/WEB-INF/templates/**/*.ftlh 中排除源模板,但包含来自 build/processed_templates/WEB-INF/templates/** 的已处理模板文件/*.ftlh.

使用简单的包含+排除导致从war文件中排除所有.ftlh文件。

解决方案是使用带有回调的排除函数,精确检查每个文件: (如果是 build.gradle.ktx 文件)

tasks.named<War>("war") { from("build/processed_templates") { include("**/*") // including processed template files } // exclude files that match certain criteria exclude { fileTreeElement -> // get absolute path and replace windows-dir-separator with slash val absPath = fileTreeElement.file.absolutePath.replace("\\", "/") // return true if file should be filtered out !fileTreeElement.isDirectory && fileTreeElement.name.endsWith(".ftlh") && absPath.contains("/src/main/webapp/WEB-INF") } }
    
© www.soinside.com 2019 - 2024. All rights reserved.