使用 Gradle 的 Application Plugin 打包生成可以用来执行 Java 程序的脚本时遇到一个问题,当使用startScripts.classpath.add(files('$APP_HOME/conf'))将配置文件加入到 classpath 的时候,生成的启动脚本中的入口却是$APP_HOME/lib/conf

解决这个问题的一个办法是将 conf 文件夹放置于发布包的 lib 目录下:

// 向发布的包增加额外文件 
distributions {
    main {
        contents {
            from(copyConfFiles) {
                into "lib/conf"
            }   
        }   
    }   
}

这种办法由于目录结构不合理被领导否认了。最终使用的办法是将启动脚本中的入口进行文本替换:

// 向发布的包增加额外文件 
distributions {
    main {
        contents {
            from(copyConfFiles) {
                into "conf"
            }   
        }   
    }   
}

// 添加额外的配置到classpath
startScripts {
    classpath += files('$APP_HOME/conf')
        doLast {
            def windowsScriptFile = file getWindowsScript()
            def unixScriptFile = file getUnixScript()
            windowsScriptFile.text = windowsScriptFile.text.replace('%APP_HOME%\\lib\\conf', '%APP_HOME%\\conf')
            unixScriptFile.text = unixScriptFile.text.replace('$APP_HOME/lib/conf', '$APP_HOME/conf')
        }   
}