Java 如何在gradle';的类路径上指定一个额外的文件夹;s应用程序插件';运行';任务
我已经成功地配置了gradle构建脚本,在根目录下创建了一个带有额外“config”文件夹的应用程序zip发行版。此文件夹(至少现在)只包含应用程序正在使用的一个属性文件,并且位于应用程序的类路径上 然而,我现在要寻找的是一种在应用程序插件中执行“运行”任务的方法。当我尝试以这种方式运行我的应用程序(用于测试)时,我的程序无法运行,因为一个类试图访问类路径根上的这个属性文件 如果我能让IntelliJ或Eclipse也像其他文件夹(src/main/java、src/main/resources,…)一样将此文件夹添加到其类路径中,这样我就可以在IDE中运行和调试代码,而无需调用gradle任务。我希望尽可能避免将此代码绑定到任何一个IDE,这样当任何人需要处理项目时,他们只需要导入build.gradle文件,并让IDE生成所需的适当配置文件 这是我的build.gradle文件: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
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]在根项目上