Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在gradle';的类路径上指定一个额外的文件夹;s应用程序插件';运行';任务_Java_Eclipse_Intellij Idea_Gradle_Classpath - Fatal编程技术网

Java 如何在gradle';的类路径上指定一个额外的文件夹;s应用程序插件';运行';任务

Java 如何在gradle';的类路径上指定一个额外的文件夹;s应用程序插件';运行';任务,java,eclipse,intellij-idea,gradle,classpath,Java,Eclipse,Intellij Idea,Gradle,Classpath,我已经成功地配置了gradle构建脚本,在根目录下创建了一个带有额外“config”文件夹的应用程序zip发行版。此文件夹(至少现在)只包含应用程序正在使用的一个属性文件,并且位于应用程序的类路径上 然而,我现在要寻找的是一种在应用程序插件中执行“运行”任务的方法。当我尝试以这种方式运行我的应用程序(用于测试)时,我的程序无法运行,因为一个类试图访问类路径根上的这个属性文件 如果我能让IntelliJ或Eclipse也像其他文件夹(src/main/java、src/main/resources

我已经成功地配置了gradle构建脚本,在根目录下创建了一个带有额外“config”文件夹的应用程序zip发行版。此文件夹(至少现在)只包含应用程序正在使用的一个属性文件,并且位于应用程序的类路径上

然而,我现在要寻找的是一种在应用程序插件中执行“运行”任务的方法。当我尝试以这种方式运行我的应用程序(用于测试)时,我的程序无法运行,因为一个类试图访问类路径根上的这个属性文件

如果我能让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 {
    ...
}
task processConfig(type: Copy) {
    from('src/main/config') {
        include '**/*'
    }

    into 'build/config/main'
}

classes {
    classes.dependsOn processConfig
}

run {
    classpath += files('build/config/main')
}

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

正如您在
运行中所看到的
是一项类型为
JavaExec
的任务。所以可以修改它的类路径。尝试将配置文件夹添加到类路径。参见。

我最终接受了欧泊的建议作为提示,并提出了以下解决方案。我在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 {
    ...
}
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文件。。。我只是很挑剔。

我想如果我们在源代码集中添加一些文件夹,它会被放入一个jar文件中(这只是我的建议,我没有检查,值得检查)。我们需要有单独的文件夹,它位于类路径上,但不在jar内。我得到
无法找到参数[build_1bx3fpm5pz4yarfze7sl1nxw$的run()方法_closure2@1d610f27]在根项目上