在Gradle Application Plugin中部署其他文件

Jam*_*itt 31 java gradle

我有一个小的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文件包含一个与项目名称相同的目录.这就是需要"进入"部分的原因.

  • 实际上,如果您在gradle中有一个版本标记,它应该看起来像这样。`version'1.0-SNAPSHOT'`,那么into()应该像这样:`into(project.name +“-” +“ + project.version)` (2认同)
  • 应该提一下,你可以使用这里描述的信息:[https://milinda.svbtle.com/copying-additional-files-with-gradle-application-plugin](https://milinda.svbtle.com/copying-additional -files与 - gradle这个-应用插件).另外,我认为除了复制文件之外,还必须修改启动脚本以将此**conf**文件夹添加到类路径中(如果需要). (2认同)

小智 28

实际上,在项目的distdir下创建一个目录src.applicationDistribution当运行installApp或distZip时,应用程序插件(下)会复制此目录中的任何内容.

applicationDistribution如果简单副本不够,可以编辑以执行其他操作.

  • 我偶然发现了这个!按惯例配置很棒......当你知道约定是什么时;-) (3认同)

fer*_*rdy 14

对我来说,简单

applicationDistribution.from("src/main/config/") {
    into "config"
}
Run Code Online (Sandbox Code Playgroud)

做了这个工作.当然,您需要从代码中正确加载属性.特别是如果您将它们从可通过类路径使用的src/main/resources移动到新位置.我通过添加指向配置文件的命令行参数来规避这一点.

  • 您可以根据需要拥有任意数量的这些,我有一个用于配置,另一个用于复制速度模板的速度。 (2认同)

c_m*_*ker 7

我不确定您是否可以自定义应用程序插件,我从未使用过它.然而,还有其他方法可以实现您想要实现的目标.

您可以创建一个/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)

同样,可能有更好的方法.这是一种方式.