java - 如何设置 gradle distZip 任务以将资源正确放入子目录和类路径中?

标签 java gradle build classpath build.gradle

我有这些 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/

相关文章:

java - 为什么我的 Iterator 搜索会输出此异常?

java - gwt Cookie 未设置或获取

Android - 根据口味更改应用程序版本名称

build - gox - 为 sqlite3 抛出错误并且所有构建都失败

shell - sass --watch 进程正在锁定我的终端窗口

java - 带小数点的整数格式

java - 当所有模块的版本均由单个属性驱动时,构建子模块而不构建父模块

spring - 如何从Groovy(Gradle)内部获取vm参数?

android - 为什么 minifyEnabled 在默认情况下在发布版本中为 false?

visual-studio-2010 - 即使当前构建未成功,Visual Studio 2010 也会启动代码 - 如何禁用?