如何执行类型' JavaExec'的任务在compileJava之前

时间:2013-10-22 22:55:46

标签: java gradle build.gradle

我需要在编译代码之前执行一个java类,其中包含一个main方法。这是我到目前为止所尝试的:

task runSimple(type: JavaExec) {
    main = 'jjrom.ObjectGen'
    classpath = sourceSets.main.runtimeClasspath
    File prop1 = file(propFilePath)
    args '-sqlserver', '-force', prop1.path
    println "I'm done executing."
}
compileJava {
    dependsOn runSimple
}

当我使用命令“gradle compileJava”执行此脚本时,收到此错误消息:

我已经完成了。

失败:构建因异常而失败。

出了什么问题:以下任务之间的循环依赖关系:: classes ---:compileJava ---:runSimple ---:classes(*)

2 个答案:

答案 0 :(得分:2)

如果在编译代码之前需要执行此类,则不能给它classpath = sourceSets.main.runtimeClasspath。后者包括已编译的代码,因此Gradle会自动推断runSimple.dependsOn compileJava,它与您的compileJava.dependsOn runSimple一起提供循环任务依赖性。 (确切地说,Gradle推断runSimple.dependsOn classes,而后者又取决于compileJava。)

答案 1 :(得分:0)

如果您只需使用JavaExec类路径运行dependecies,只需将classpath变量更改为:

classpath = configurations.compile

或者如果您对非常具体的类路径感兴趣,可以添加如下自定义配置:

configurations {
    customClasspath
}

dependencies {
    customClasspath files('path/to/your.jar')
}

task runSimple(type: JavaExec) {
    main = 'jjrom.ObjectGen'
    classpath = configurations.customClasspath
    File prop1 = file(propFilePath)
    args '-sqlserver', '-force', prop1.path
    println "I'm done executing."
}

compileJava {
    dependsOn runSimple
}