我有一个小的Java/Gradle项目.我正在使用Application插件创建一个zip分发(使用distZip任务).使用标准配置,我在我的zip文件中获得以下目录:
/ bin - 启动应用程序的脚本放在这里
/ lib - 包含JAR文件中的项目代码和所有依赖项JAR文件.
麻烦的是我想要第三个目录:/ conf我可以放置我的配置文件(而不是将它们打包在我的应用程序JAR文件中).
我想这是一个非常常见的要求,因为像log4j.xml和hibernate.properties这样的东西会更好地放在JAR文件之外.我只是无法弄清楚如何自定义Application插件的行为来执行此操作.
Jam*_*itt 32
几个月后我重新讨论了这个问题,我终于找到了一个优雅的解决方案.应将以下代码添加到gradle文件中:
distZip {
into(project.name) {
from '.'
include 'conf/*'
}
}
Run Code Online (Sandbox Code Playgroud)
这为distZip任务添加了额外的包含.这会将"conf"目录(包括内容)复制到Zip分发中.
生成的zip文件包含一个与项目名称相同的目录.这就是需要"进入"部分的原因.
小智 28
实际上,在项目的dist
dir下创建一个目录src
.applicationDistribution
当运行installApp或distZip时,应用程序插件(下)会复制此目录中的任何内容.
applicationDistribution
如果简单副本不够,可以编辑以执行其他操作.
fer*_*rdy 14
对我来说,简单
applicationDistribution.from("src/main/config/") {
into "config"
}
Run Code Online (Sandbox Code Playgroud)
做了这个工作.当然,您需要从代码中正确加载属性.特别是如果您将它们从可通过类路径使用的src/main/resources移动到新位置.我通过添加指向配置文件的命令行参数来规避这一点.
我不确定您是否可以自定义应用程序插件,我从未使用过它.然而,还有其他方法可以实现您想要实现的目标.
您可以创建一个/conf
这样的目录:
confDir = new File("$buildDir/conf")
Run Code Online (Sandbox Code Playgroud)
然后,您可以将所需的文件复制到此目录中,如下所示:
task copyConfFiles(type: Copy) {
from _wherever your files reside_
into confDir
include('**/*.properties') // your configuration files
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将此复制任务挂钩到此过程中:
distZip.dependsOn copyConfFiles
Run Code Online (Sandbox Code Playgroud)
如果你不想在最终的拉链中使用你的配置,你可以这样做:
distZip {
exclude('**/*.properties') // your configuration files
}
Run Code Online (Sandbox Code Playgroud)
同样,可能有更好的方法.这是一种方式.