Gradle - 将目录添加到类路径

31

我的应用程序要求当它在目录下查找配置文件时,类路径上必须有一个\config目录可用。我目前已经按照以下方式配置依赖项,但这可能不是将目录提供给我的应用程序的正确方法:

dependencies {
    ... //runtime, compile dependencies pulled from repositories
    runtime files('config')
}

我正在使用 application 插件为我的项目创建独立的 zip 包。如果我的 \config 目录下还有 \config\subdirfile1file2,那么该插件会生成一个 build\install 目录,并具有以下结构:

| build
| --|install
| ----|bin
| ------ projectName
| ------ projectName.bat
| ----|lib
| ------ dependency1.jar
| ------ dependency2.jar
| ------|subdir
| ------ file1
| ------ file2

这对我的应用程序不起作用,因为它明确要求一个\config目录。

然而,这是我需要的目录结构:

| build
| --|install
| ----|bin
| ------ projectName
| ------ projectName.bat
| ----|lib
| ------ dependency1.jar
| ------ dependency2.jar
| ----|config
| ------|subdir
| ------ file1
| ------ file2

我该如何让Gradle将另一个目录添加到构建中,并将其指定为生成的启动脚本的类路径的一部分?


你的配置文件夹位于源目录的哪里?如果它在src/main/resources中,我想应用程序插件也会将其打包。 - RaGe
它不在源目录中,而是在项目根文件夹中。需要移动吗? - Omar Darwish
你是如何将它添加到类路径的?是的,我建议按照我下面发布的方法将其移动到/src/dist。 - RaGe
我尝试将配置文件夹移动到 src/main/resources,但我的应用程序没有捕获它。我做错了什么? - Omar Darwish
3个回答

10
应用程序插件文档说明:

要添加到发布目录的静态文件可以简单地添加到src/dist中

我建议将配置目录放入src/dist/lib并通过runtime files('src/dist/lib/config')将其添加到类路径中。

注意:解决这个缺陷需要将配置放入src/dist下的/lib目录中。


我尝试了这种方法。现在我可以获取我在问题中描述的第二目录结构,但是生成的脚本中classpath仍然不正确。它将classpath定义为set CLASSPATH =%APP_HOME%\ lib \ config,但应该是set CLASSPATH =%APP_HOME%\ config。我该如何实现? - Omar Darwish
如果我手动配置生成的脚本为set CLASSPATH=%APP_HOME%\config,我的应用程序可以正常工作,但这绝对不是理想的。我不应该编辑构建输出,对吧? - Omar Darwish
2
叹气,看起来你遇到了这个问题:https://issues.gradle.org/browse/GRADLE-2991,不,你不应该在构建后手动编辑任何脚本。我能想到的最简单的解决方法是将你的配置文件夹放在`/src/dist/lib`中。 - RaGe

7
您可以尝试这个方法:
project('project-name') {
   apply plugin: 'application'
   mainClassName = "your.main.Class"

   startScripts {
       classpath += files('src/dist/lib/conf')
   }

更多信息可以在这里找到。


1
jar {
    manifest {
        attributes('Class-Path' : '<directory>' )
    }
}

上述对我有效


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接