我有一个小的Java / Gradle项目 . 我正在使用Application plugin创建一个zip分发(使用distZip任务) . 使用标准配置我在我的zip文件中获得以下目录:
/bin - 启动应用程序的脚本进入此处
/lib - 包含JAR文件中的项目代码和所有依赖项JAR文件 .
麻烦的是我想要第三个目录: /conf 我可以放置我的配置文件(而不是将它们打包在我的应用程序JAR文件中) .
我想这是一个非常常见的要求,因为像log4j.xml和hibernate.properties这样的东西会更好地放在JAR文件之外 . 我只是无法弄清楚如何自定义Application插件的行为来执行此操作 .
5 回答
几个月后我重新讨论了这个问题,我终于找到了一个优雅的解决方案 . 应将以下代码添加到gradle文件中:
这为distZip任务添加了额外的包含 . 这会将“conf”目录(包括内容)复制到Zip分发中 .
生成的zip文件包含一个与项目名称相同的目录 . 这就是需要“进入”部分的原因 .
我不确定您是否可以自定义应用程序插件,我从未使用过它 . 然而,还有其他方法可以实现您想要实现的目标 .
您可以创建一个
/conf
目录,如下所示:然后,您可以将所需的文件复制到此目录中,如下所示:
然后,您可以将此复制任务挂钩到此过程中:
如果你不想在最终的zip中使用你的配置,那么你可以这样做:
同样,可能有更好的方法 . 这是一种方式 .
实际上,在项目中的
src
目录下创建一个dist
目录 . 当运行installApp或distZip时,应用程序插件(在applicationDistribution
下)会复制此目录中的任何内容 .或编辑
applicationDistribution
做其他事情,如果一个简单的副本是不够的 .OP的自我回答可能对他的用例有好处,但我想改进一些事情:
build.gradle
平行的目录conf
. 在Maven Standard Directory Layout中没有这样的东西 . 普遍的共识是,如文件中暗示的那样:src/main/conf
:目标目录名称不是
project.name
,正如评论中指出的那样 .如果需要资源过滤,并且经常需要,则需要单独的任务 . 在本地开发期间,可以运行此任务以生成过滤的文件 . 分发只会使用此任务的输出(与OP的答案不同,这也使得
conf
可用于tar分配) .对我来说,简单
做了这个工作 . 当然,您需要在代码中正确加载属性 . 特别是如果您将它们从可通过类路径使用的src / main / resources移动到新位置 . 我通过添加指向配置文件的命令行参数来规避这一点 .