如何在gradle的应用程序插件"运行"任务的类路径中指定一个额外的文件夹?

age*_*154 12 java eclipse classpath intellij-idea gradle

我已成功配置我的gradle构建脚本,以创建我的应用程序的zip分发,并在根目录下添加一个额外的'config'文件夹.此文件夹仅包含(至少现在)应用程序正在使用的一个属性文件,并且位于应用程序的类路径中.

然而,我现在正在寻找的是对应用程序插件中的"运行"任务执行相同操作的方法.当我尝试以这种方式运行我的应用程序时(为了测试),我的程序无法运行,因为类试图在类路径的根目录上访问此属性文件.

如果我可以让IntelliJ或Eclipse将这个文件夹添加到其类路径中,就像其他文件夹(src/main/java,src/main/resources,...)那样我可以运行和调试我的代码在IDE中,无需调用gradle任务.我想尽量避免将此代码绑定到任何一个IDE,以便当任何人需要处理项目时,他们只需要导入build.gradle文件并让IDE生成所需的相应配置文件.

这是我的build.gradle文件:

apply plugin: 'application'

mainClassName = "MainClass"

startScripts {
    // Add config folder to classpath. Using workaround at
    // https://discuss.gradle.org/t/classpath-in-application-plugin-is-building-always-relative-to-app-home-lib-directory/2012
    classpath += files('src/dist/config')
    doLast {
        def windowsScriptFile = file getWindowsScript()
        def unixScriptFile = file getUnixScript()
        windowsScriptFile.text = windowsScriptFile.text.replace('%APP_HOME%\\lib\\config', '%APP_HOME%\\config')
        unixScriptFile.text = unixScriptFile.text.replace('$APP_HOME/lib/config', '$APP_HOME/config')
    }
}

repositories {
    ...
}

dependencies {
    ...
}
Run Code Online (Sandbox Code Playgroud)

可能需要发生的是我需要将/ src/dist/config文件夹复制到构建目录并添加到类路径中,或者将其内容复制到已存在于类路径中的文件夹中.

age*_*154 18

我最终将Opal的建议作为提示,并提出了以下解决方案.我在build.gradle文件中添加了以下内容:

task processConfig(type: Copy) {
    from('src/main/config') {
        include '**/*'
    }

    into 'build/config/main'
}

classes {
    classes.dependsOn processConfig
}

run {
    classpath += files('build/config/main')
}
Run Code Online (Sandbox Code Playgroud)

或者,更简单的方法是将运行时依赖项添加到我的项目中:

dependencies {
    ...
    runtime files('src/main/config')
}
Run Code Online (Sandbox Code Playgroud)

我没有这样做,但是,因为我的发行包最终在lib文件夹中有.properties文件...而且我只是那么挑剔.

  • 我在根项目上得到“找不到参数[build_1b0x3fpm5pz4yarfze7sl1nxw $ _run_closure2 @ 1d610f27]的方法run()”。 (2认同)

Opa*_*pal 3

正如您在文档 中看到的,run这是一个类型为 的任务JavaExec。所以它的类路径可以修改。尝试将config文件夹添加到类路径中。看这里