在编译代码之前,我需要执行一个包含 main 方法的 java 类。这是我到目前为止所尝试过的:
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
}
Run Code Online (Sandbox Code Playgroud)
当我使用命令“gradlecompileJava”执行此脚本时,我收到以下错误消息:
我已经执行完了。
失败:构建失败并出现异常。
出了什么问题:以下任务之间的循环依赖: :classes --- :compileJava --- :runSimple --- :classes (*)
我正在使用Gradle创建多项目构建文件。许多子项目需要通过传入某些参数来执行另一个子项目中存在的任务。在Gradle中如何实现?
例如 :
root project
- project B : task X
- project A : task Y (param m, param n)
Run Code Online (Sandbox Code Playgroud)
我需要projectB.taskX来调用projectA.taskY(m,n)
更新:
子项目A具有JavaExec类型的任务,该任务需要输入参数到属性文件的位置
task generateCode(dependsOn:['classes','build'], type: JavaExec) {
main = 'jjrom.ObjectGen'
classpath = sourceSets.main.runtimeClasspath
args 'arg1', 'arg2', file(propertiesFilePath).path
}
Run Code Online (Sandbox Code Playgroud)
现在,有10个子项目,所有这些子项目都需要使用包含属性文件位置的参数来调用此任务“ generateCode”。同样,应该在构建每个子项目之前执行此任务,这可以使用dependsOn实现。
我的Java项目代码组织:
trunk/
projA/src/java/../ObjectGen.java
projB/src/java/../properties.xml
projC/src/java/../properties.xml
projD/src/java/../properties.xml
....
Run Code Online (Sandbox Code Playgroud) 我有一些资源文件,其中包含一些需要使用java插件任务'processResources'替换文件路径的标记.gradle是否提供了一种方式,令牌值是表达式?
1)src/resources/config.properties文件有一个令牌:SRC_ROOT_DIR = @ SRC_ROOT_DIR @
2)build.gradle文件包含以下内容:
processResources{
filter ReplaceTokens, tokens:[SRC_ROOT_DIR: project.projectDir]
}
Run Code Online (Sandbox Code Playgroud)
这引发了一个异常说:无法将文件'..src\resources\config.properties'复制到'..build\resources\main\config.properties'