我用摇篮的应用插件生成安装了一个独立的Java应用程序。 我有一个配置文件,我需要把在类路径中,但我似乎无法得到它的SH / BAT文件正确生成的类路径。 这个配置文件需要位于罐外。
conf文件在目录/src/dist/conf/
所以当我运行installApp
它这样的conf目录下安装它$APP_HOME/conf
。
我想这个目录添加到这样的claspath:
startScripts.classpath.add(files('$APP_HOME/conf'))
但是当我看到在SH / BAT文件的类路径它增加了,看起来像这样的条目:
$APP_HOME/lib/conf
我如何告诉gradle这个砸lib
此条节?
针对此问题(另一种解决方法摇篮-2333 )是由亚历山大·法捷耶夫提出了这里 。
这里是(有点修改)亚历山大的解决方案,解决了这个问题,我在摇篮 - 1.6:
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')
}
}
它比约什的解决方案丑了一点,但它可以让你保留原始问题中提到的确切目录结构(/ src目录/距离/ conf目录和$ APP_HOME / conf目录)。
得到一个文件到类路径最简单的方法就是把它变成src/main/resources
。 src/dist
是用于将文件添加到分布(即压缩文件),不以JAR /类路径。
这是不是一个特别好的回答你的问题,但我发现少数情况下,该startScripts任务不相当,但都是我们所需要的灵活性。
我已经通过直接编辑文件内容......不完全采取摇篮的巨大模型的优势,围绕一对夫妇的这些实例的工作,不是特别推荐,但至少展示了摇篮是很灵活的!
所以,你可以砍东西放到这样的类路径:
tasks.startScripts {
doLast {
def scriptFile = file "${outputDir}/${applicationName}"
scriptFile.text = scriptFile.text.replace('CLASSPATH=$APP_HOME/lib', 'CLASSPATH=$APP_HOME/conf/:$APP_HOME/lib')
}
}
要知道这样做的时候打破了启动脚本的平台独立性。
在我看来,这就是我要做的不应该是远远不寻常的,但作为一种解决方法,我可以有dist
目录中src/dist/lib/conf
允许conf
目录放置在在lib
目录和类路径gradle这个生成用于SH / BAT文件是正确的。
我会接受另外一个答案,如果有人有一个更好的。
我做了以下马丁陶氏配方的变体:
我代替“APP_HOME =”在启动脚本“出口APP_HOME =”。
然后我的代码可以做System.env.get(“APP_HOME”),然后导航到例如通过conf /目录。
这是我的摇篮黑客:
tasks.startScripts {
doLast {
def scriptFile = file "${outputDir}/${applicationName}"
scriptFile.text = scriptFile.text.replaceAll('APP_HOME=', 'export APP_HOME=')
}
}
的在应用程序的Java代码例如:
String APP_HOME = System.env().get("APP_HOME");
Properties p = new Properties();
p.load(new FileInputStream(APP_HOME + "/conf/myapp.properties"))
希望这可以帮助。
注:“出口”不工作在Windows!