【问题标题】:How do I specify an extra folder to be on the classpath for gradle's application plugin 'run' task?如何在 gradle 的应用程序插件“运行”任务的类路径中指定一个额外的文件夹?
【发布时间】:2015-08-10 01:31:07
【问题描述】:

我已成功配置我的 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 {
    ...
}

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

【问题讨论】:

    标签: java eclipse intellij-idea gradle classpath


    【解决方案1】:

    我最终接受了 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')
    }
    

    或者,一种更简单的方法是向我的项目添加运行时依赖项:

    dependencies {
        ...
        runtime files('src/main/config')
    }
    

    不过,我最终并没有这样做,因为我的分发包最终在 lib 文件夹中有 .properties 文件......而我只是这样挑剔。

    【讨论】:

    • 我收到Could not find method run() for arguments [build_1b0x3fpm5pz4yarfze7sl1nxw$_run_closure2@1d610f27] on root project
    【解决方案2】:

    正如您在docs 中看到的,runJavaExec 类型的任务。所以 classpath 是可以修改的。尝试将 config 文件夹添加到类路径中。见here

    【讨论】:

    • 我想如果我们将一些文件夹添加到源集,它将被放入一个 jar 文件中(这只是我的建议,我没有检查,值得检查)。我们需要有单独的文件夹,即在类路径上,但不在 jar 内。
    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2013-02-06
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    相关资源
    最近更新 更多