添加使用摇篮的应用插件类路径条目(Adding classpath entries using Gr

2019-07-29 08:03发布

我用摇篮的应用插件生成安装了一个独立的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此条节?

Answer 1:

针对此问题(另一种解决方法摇篮-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目录)。



Answer 2:

得到一个文件到类路径最简单的方法就是把它变成src/main/resourcessrc/dist是用于将文件添加到分布(即压缩文件),不以JAR /类路径。



Answer 3:

这是不是一个特别好的回答你的问题,但我发现少数情况下,该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')
  }
}

要知道这样做的时候打破了启动脚本的平台独立性。



Answer 4:

在我看来,这就是我要做的不应该是远远不寻常的,但作为一种解决方法,我可以有dist目录中src/dist/lib/conf允许conf目录放置在在lib目录和类路径gradle这个生成用于SH / BAT文件是正确的。

我会接受另外一个答案,如果有人有一个更好的。



Answer 5:

我做了以下马丁陶氏配方的变体:

我代替“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!



文章来源: Adding classpath entries using Gradle's Application plugin