Gradle 抑制梯度';s JavaExec输出
下面是gradle代码,我不知道如何避免Gradle 抑制梯度';s JavaExec输出,gradle,Gradle,下面是gradle代码,我不知道如何避免JavaExectask生成的巨大输出。我没有找到它的JavaExec选项。如果有人知道忽略它的更好方法,请分享 def getStubOutput() { return new FileOutputStream(new File("${buildDir}/temp")) } configure(project(':jradius:dictionary-min')) { evaluationDependsOn(':jradius')
JavaExec
task生成的巨大输出。我没有找到它的JavaExec
选项。如果有人知道忽略它的更好方法,请分享
def getStubOutput() {
return new FileOutputStream(new File("${buildDir}/temp"))
}
configure(project(':jradius:dictionary-min')) {
evaluationDependsOn(':jradius')
sourceSets {
main {
java {
srcDir "${projectDir}/target/dictionary-src"
}
}
}
dependencies {
compile project(':jradius:core')
}
task genSources(type: JavaExec) {
main = 'net.jradius.freeradius.RadiusDictionary'
classpath configurations.all
args = ["net.jradius.dictionary", "${projectDir}/../freeradius/dict-min", "${projectDir}/target/dictionary-src"]
maxHeapSize = "800m"
standardOutput = getStubOutput()
}
jar {
archiveName = "jradius-dictionary-min-1.1.5-SNAPSHOT.jar"
}
genSources.dependsOn ':jradius:cloneJradius'
compileJava.dependsOn genSources
}
正如在评论中一样,我认为
standardOutput
可以设置为null
,但以下代码段(取自:org.gradle.process.internal.AbstractExecHandleBuilder
)表明这是不可能的:
public AbstractExecHandleBuilder setStandardOutput(OutputStream outputStream) {
if (outputStream == null) {
throw new IllegalArgumentException("outputStream == null!");
}
this.standardOutput = outputStream;
return this;
}
您可以使用以下oneliner将输出重定向到临时文件(文件将被删除!):
task genSources(type: JavaExec) {
main = 'net.jradius.freeradius.RadiusDictionary'
classpath configurations.all
args = ["net.jradius.dictionary", "${projectDir}/../freeradius/dict-min", "${projectDir}/target/dictionary-src"]
maxHeapSize = "800m"
standardOutput = { def f = File.createTempFile('aaa', 'bbb' ); f.deleteOnExit(); f.newOutputStream() }()
}
或者,如果要保存此输出以供进一步阅读:
task genSources(type: JavaExec) {
main = 'net.jradius.freeradius.RadiusDictionary'
classpath configurations.all
args = ["net.jradius.dictionary", "${projectDir}/../freeradius/dict-min", "${projectDir}/target/dictionary-src"]
maxHeapSize = "800m"
standardOutput = new File(project.buildDir, 'radius.log').newOutputStream()
}
最后一个选项是将apache commons io添加到脚本依赖项中,并将standardOutput
设置为NullOutputStream
。在中,可以按以下方式执行:
import static org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'commons-io:commons-io:2.4'
}
}
task genSources(type: JavaExec) {
main = 'net.jradius.freeradius.RadiusDictionary'
classpath configurations.all
args = ["net.jradius.dictionary", "${projectDir}/../freeradius/dict-min", "${projectDir}/target/dictionary-src"]
maxHeapSize = "800m"
standardOutput = NULL_OUTPUT_STREAM
}
这就是我想到的一切。我只是使用一个虚拟的OutputStream,它在
写入方法中什么都不做:
def dummyOutputStream = new OutputStream() {
@Override
public void write(int b) {}
}
exec {
executable = name
standardOutput = dummyOutputStream
errorOutput = dummyOutputStream
ignoreExitValue = true
}
这将禁用javaExec
任务的标准输出:
task myCustomTask(type: javaExec) {
standardOutput = new ByteArrayOutputStream()
classpath = ...
main = ...
args ....
}
我遇到的一个很好的解决方案是修改任务的日志记录级别。如果将其设置为INFO,那么它将抑制该任务的所有输出,除非gradle使用--INFO运行
或者,您可以将级别设置为LogLevel.QUIET,这将使其完全静音
task chatty(type: Exec) {
....
logging.captureStandardOutput LogLevel.INFO
}
可能只是将null
分配给standardOutput
?分配的方式是什么?task genSources(类型:JavaExec){…standardOutput=null}给出了一个错误*出错原因:评估根项目“MyProject”时出现问题。>outputStream==null!所以它显然不是那样工作的。谢谢大家,但我几乎忘记了这个脚本,并且担心:)无论如何,谢谢!这是一个逻辑层次。仅从该任务中取消stdout?现在没有机会检查,但为了未来…是的,这就是它对我的作用。其他任务不受影响。gradle 3.3对我没有任何影响。这项工作对我来说(gradle 4.2.1)。您可能需要添加:logging.captureStandardErrorLogLevel.INFO
。另外,LogLevel.QUIET
实际上高于LogLevel.INFO
。如果要使任务输出静音,应使用最低级别:LogLevel.DEBUG
。然后,只有在使用--debug
运行gradle时,才能看到输出。