我正在使用Gradle的Application插件为独立的Java应用程序生成安装 . 我有一个配置文件,我需要放在类路径上,但我似乎无法让它在sh / bat文件中正确生成类路径 . 此配置文件需要位于jar外部 .
conf文件位于 /src/dist/conf/
目录中,因此当我运行 installApp
时,它会将其安装在这样的 $APP_HOME/conf
之类的conf目录下 .
我尝试将此目录添加到claspath,如下所示:
startScripts.classpath.add(files('$APP_HOME/conf'))
但是当我查看sh / bat文件中的类路径时,它会添加一个如下所示的条目:
$APP_HOME/lib/conf
如何告诉gradle删除此条目的 lib
部分?
5 回答
此问题的另一个解决方法(GRADLE-2333)由Alexandr Fadeev提出here .
这是(有点修改)Alexandr的解决方案,在Gradle-1.6上解决了我的问题:
它比Josh的解决方案有点丑,但它允许您保留原始问题中提到的确切目录布局(/ src / dist / conf和$ APP_HOME / conf) .
将文件放到类路径上的最简单方法是将其放入
src/main/resources
.src/dist
用于将文件添加到分发(即zip文件),而不是添加到Jar /类路径 .这对你的问题不是一个特别好的答案,但是我发现了一些startScripts任务还没有我们需要的灵活性的实例 .
通过直接编辑文件内容,我已经解决了几个这样的实例......并没有完全利用Gradle的优秀模型而不是特别推荐,但至少展示了Gradle的灵活性!
所以你可以像这样破解类路径中的东西:
在执行此操作时,请注意打破启动脚本的平台独立性 .
在我看来,我远远超出了常规,但作为一种解决方法,我可以让
dist
目录为src/dist/lib/conf
,它允许conf
目录放在lib
目录中,并且gradle为sh生成的类路径/ bat文件是正确的 .如果有人有更好的答案,我会接受另一个答案 .
我在下面做了Martin Dow的配方变体:
我在启动脚本中将'APP_HOME ='替换为'export APP_HOME =' .
然后我的代码可以执行System.env.get(“APP_HOME”),然后导航到例如conf /文件夹 .
这是我的Gradle hack:
应用程序中的Java代码示例:
希望这可以帮助 .
注意:"export"在Windows中不起作用!