您能否分享一个带有配置文件夹“conf”的 build.gradle 脚本示例:
添加#1:
我已经完成了@wakjah 指出的答案中提到的操作,文件被复制到一个 zip 文件并且在 期间没有放入 jar gradle distZip,这涵盖了我的要求 #1。但是此文件夹不在文件夹的启动脚本中的类路径上bin(不包括要求 #2 )。运行时文件不在类路径上gradle clean run(不包括要求 #3 )。
添加#2:
在@wakjah的帮助下,我从头开始了示例项目,现在我拥有:
config包含资源文件),但此资源也在lib文件夹中。config在启动脚本中的类路径上),但类路径还包含无效文件夹%APP_HOME%\lib\config此外,我测试的加载文件内容的方法3(如所提到的在这里),方法Thread.currentThread().getContextClassLoader().getResource(name)成功。
在此处添加了我的示例项目 zip 文件:http : //rgho.st/8r2dJjSz7
添加#3:
当我在 gradle 脚本中评论/删除时:
dependencies {
runtime files('src/dist/config')
}
lib/config文件夹不在 CLASSPATH 上(没关系),并且资源文件不会复制到lib文件夹中(没关系)。但是资源文件无法从 Idea 加载起始类 main() 方法并gradle clean run从命令提示符运行。在gradle clean distZip部署(解包)应用程序之后,资源被加载。
添加#4:
更换后
dependencies {
runtime files('src/dist/config')
}
对
tasks.withType(JavaExec) {
classpath += files('src/dist/config')
}
一切都很好,谢谢,@wakjah!还有一个问题,在初始要求中没有提到:当我在 Idea 中启动这个项目时(不是执行 gradle run,而是直接从 Idea 在类中启动 main()),目录中的config文件无法使用前面提到的任何方法加载.
正如此处Gradle distZip 配置文件所述,您只需将文件夹添加dist/config到您的src文件夹中,它将自动包含在distZip任务中。
至于将其添加到运行时类路径中,只需将该文件夹添加为依赖项即可(见下文)。
由于 .2 的限制,要求 2 有点困难startScripts。但是,这个问题的答案提出了一种解决方法:Adding classpath Entry using Gradle's Application plugin
以下代码收集了以上所有内容:
// put config files in src/dist/config
dependencies {
runtime files('src/dist/config')
}
startScripts {
classpath += files('src/dist/XxxAPlaceHolderForAConfigxxX')
doLast {
def windowsScriptFile = file getWindowsScript()
def unixScriptFile = file getUnixScript()
windowsScriptFile.text = windowsScriptFile.text.replace('%APP_HOME%\\lib\\XxxAPlaceHolderForAConfigxxX', '%APP_HOME%\\config')
unixScriptFile.text = unixScriptFile.text.replace('$APP_HOME/lib/XxxAPlaceHolderForAConfigxxX', '$APP_HOME/config')
}
}
Run Code Online (Sandbox Code Playgroud)
我已经对此进行了测试,它似乎有效。正确的类路径条目会出现在任务期间运行脚本和 gradle 使用的命令行中run。
编辑:在您的评论中,您暗示您还希望它在构建脚本的类路径中可用。如果是这种情况,您需要添加一个构建脚本依赖项,如下所示:
buildscript {
dependencies {
classpath files('src/dist/config')
}
}
Run Code Online (Sandbox Code Playgroud)
编辑#2:在另一条评论中,您提到添加运行时依赖项会产生意想不到的结果,即在启动脚本类路径中生成额外的无效条目。您可以通过添加到任何JavaExec任务的类路径而不是使用依赖项来解决此问题。因此将dependencies { runtime { ... } }块替换为
tasks.withType(JavaExec) {
classpath += files('src/dist/config')
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5790 次 |
| 最近记录: |