我有这些 build.gradle 文件:
dependencies {
runtime files('src/main/resources')
runtime files('src/main/resources/cfg')
runtime files('src/main/resources/sql')
}
jar {
exclude 'cfg/*'
exclude 'cfg/'
exclude 'sql/*'
exclude 'sql/'
}
还有这个
dependencies {
runtime files('src/main/resources')
runtime files('src/main/resources/cfg')
runtime files('src/main/resources/fxml')
runtime files('src/main/resources/icons')
}
jar {
exclude 'cfg/*'
exclude 'cfg/'
exclude 'icons/*'
exclude 'icons/'
exclude 'fxml/*'
exclude 'fxml/'
}
startScripts {
doLast {
def winScriptFile = file getWindowsScript()
def winFileText = winScriptFile.text
winFileText = winFileText.replaceAll 'set CLASSPATH=.*', 'set CLASSPATH=%APP_HOME%\\\\lib\\\\\\*;%APP_HOME%\\\\lib\\\\cfg;%APP_HOME%\\\\lib\\\\fxml;%APP_HOME%\\\\lib\\\\icons;%APP_HOME%\\\\lib\\\\sql'
}
}
我可以从 projectName.jar 文件中排除资源目录及其文件,但无法从 distZip/distTar 任务创建的/lib 目录中的子目录中排除文件。
我想在 zip/tar 中使用此布局
projectName/
|
|-lib/
| |
| |-cfg/
| | |-*.*
| |
| |-fxml/
| | |-*.fxml
| |
| |-icons/
| | |-*.ico
| |
| |-sql/
| | |-*.sql
| |
| |-*.jar
|
|-bin/
|
|-projectName.bat
子目录中的所有资源都不包含在 lib 目录中,并且子目录在 projectName.bat
中的 CLASSPATH
变量中设置,以便应用程序能够加载所有资源。
最佳答案
我能够弄清楚,我必须提供这样的资源,将子目录放入 lib 目录
dependencies {
runtime files('src/main/resources')
}
这个变化:
- winFileText = winFileText.replaceAll 'set CLASSPATH=.*', 'set CLASSPATH=%APP_HOME%\\\\lib\\\\\\*;%APP_HOME%\\\\lib\\\\cfg;%APP_HOME%\\\\lib\\\\fxml;%APP_HOME%\\\\lib\\\\icons;%APP_HOME%\\\\lib\\\\sql'
+ winFileText = winFileText.replaceAll 'set CLASSPATH=.*', 'set CLASSPATH=%APP_HOME%\\\\lib\\\\\\*;%APP_HOME%\\\\lib;%APP_HOME%\\\\lib\\\\cfg;APP_HOME%\\\\lib\\\\fxml;APP_HOME%\\\\lib\\\\icons;APP_HOME%\\\\lib\\\\sql'
缺少:%APP_HOME%\\\\lib;
它是必需的,因为 fxml 资源在源代码中是这样引用的:
getClass().getResource("/fxml/somelayout.fxml")
它在 lib/
目录中的 CLASSPATH
上查找资源。这个缺失了。
关于java - 如何设置 gradle distZip 任务以将资源正确放入子目录和类路径中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38150758/