![](/img/trans.png)
[英]how to exclude a folder from checkstyle of Gradle on Intellij
[英]Gradle: Exclude file from resourses and add it from different folder
我正在嘗試使用 Gradle 構建 jar 文件。 我在構建 jar 時想要排除的 src/main/resources 中有一些資源文件(如 log4j2 和 persistent.xml),相反我有相同的文件(在項目目錄中具有不同的內容)並且我想要復制這些文件而不是 src/main/resource 文件。
進入我的 gradle.build
from jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
// The parent folder is: src/main/resources for the (1) and (2)
exclude('META-INF/persistence.xml') // (1)
exclude('log4j2.xml') // (2)
from('distributions/persistence.xml'){ // (3)
into 'META-INF'
filter(ReplaceTokens, tokens: [TEST_PARAM: 'tmp_value1'])
}
from('distributions/log4j2.xml') { // (4)
filter(ReplaceTokens, tokens: [TEST_PARAM: 'tmp_value1'])
}
}
所以我手動排除了這兩個文件(1),(2),然后我添加了(3),(4)。 當我提取 jar 時,我可以找到 persistence.xml 但找不到 log4j2.xml。
我的問題是,為什么會發生這種情況?
如果我將(1),(2)替換為
processResources.exclude('*')
在 jar 中放置了 persistence.xml 而不是 log4j2.xml。
提前致謝。
根據本文檔:任何排除模式都會覆蓋任何包含,因此如果文件或目錄與至少一個排除模式匹配,則無論包含模式如何,它都不會被包含。
您觀察到的行為似乎是由 gradle 如何處理文件排除引起的。 您執行此操作的方式適用於復制到 jar 文件中的子文件夾的文件。 由於某種原因,它不適用於復制到 jar 文件的根文件夾的文件。
您可以使用此配置實現您想要的:
jar {
from('distributions') {
include("**/*.xml")
}
eachFile {
if (it.file.path =~ "build/resources/main/") {
// exclude resources copied from build/resources/main/
it.exclude()
}
}
}
這是我使用的項目樹,因為我的可能與您正在處理的項目不同:
├── build.gradle
├── distributions
│ ├── META-INF
│ │ └── persistence.xml
│ └── log4j2.xml
└── src
└── main
├── java
│ └── Main.java
└── resources
├── META-INF
│ └── persistence.xml
└── log4j2.xml
該解決方案基於以下討論:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.