CB-9971: Suppressed unwanted java stderr output when running gradle wrapper

this closes #388
This commit is contained in:
Nikita Matrosov 2017-06-26 20:55:14 +03:00
parent 3ff32092a3
commit 540929c6a0
2 changed files with 41 additions and 31 deletions

View File

@ -37,7 +37,7 @@ var TEMPLATE =
function GradleBuilder (projectRoot) { function GradleBuilder (projectRoot) {
GenericBuilder.call(this, projectRoot); GenericBuilder.call(this, projectRoot);
this.binDirs = {gradle: this.binDirs.gradle}; this.binDirs = { gradle: this.binDirs.gradle };
} }
util.inherits(GradleBuilder, GenericBuilder); util.inherits(GradleBuilder, GenericBuilder);
@ -75,7 +75,10 @@ GradleBuilder.prototype.runGradleWrapper = function (gradle_cmd) {
if (fs.existsSync(gradlePath)) { if (fs.existsSync(gradlePath)) {
// Literally do nothing, for some reason this works, while !fs.existsSync didn't on Windows // Literally do nothing, for some reason this works, while !fs.existsSync didn't on Windows
} else { } else {
return superspawn.spawn(gradle_cmd, ['-p', this.root, 'wrapper', '-b', wrapperGradle], {stdio: 'inherit'}); return superspawn.spawn(gradle_cmd, ['-p', this.root, 'wrapper', '-b', wrapperGradle], { stdio: 'pipe' })
.progress(function (stdio) {
suppressJavaOptionsInfo(stdio);
});
} }
}; };
@ -219,23 +222,9 @@ GradleBuilder.prototype.build = function (opts) {
var wrapper = path.join(this.root, 'gradlew'); var wrapper = path.join(this.root, 'gradlew');
var args = this.getArgs(opts.buildType === 'debug' ? 'debug' : 'release', opts); var args = this.getArgs(opts.buildType === 'debug' ? 'debug' : 'release', opts);
return superspawn.spawn(wrapper, args, {stdio: 'pipe'}).progress(function (stdio) { return superspawn.spawn(wrapper, args, { stdio: 'pipe' })
if (stdio.stderr) { .progress(function (stdio) {
/* suppressJavaOptionsInfo(stdio);
* Workaround for the issue with Java printing some unwanted information to
* stderr instead of stdout.
* This function suppresses 'Picked up _JAVA_OPTIONS' message from being
* printed to stderr. See https://issues.apache.org/jira/browse/CB-9971 for
* explanation.
*/
var suppressThisLine = /^Picked up _JAVA_OPTIONS: /i.test(stdio.stderr.toString());
if (suppressThisLine) {
return;
}
process.stderr.write(stdio.stderr);
} else {
process.stdout.write(stdio.stdout);
}
}).catch(function (error) { }).catch(function (error) {
if (error.toString().indexOf('failed to find target with hash string') >= 0) { if (error.toString().indexOf('failed to find target with hash string') >= 0) {
return check_reqs.check_android_target(error).then(function () { return check_reqs.check_android_target(error).then(function () {
@ -253,7 +242,7 @@ GradleBuilder.prototype.clean = function (opts) {
var wrapper = path.join(this.root, 'gradlew'); var wrapper = path.join(this.root, 'gradlew');
var args = builder.getArgs('clean', opts); var args = builder.getArgs('clean', opts);
return Q().then(function () { return Q().then(function () {
return superspawn.spawn(wrapper, args, {stdio: 'inherit'}); return superspawn.spawn(wrapper, args, { stdio: 'inherit' });
}).then(function () { }).then(function () {
shell.rm('-rf', path.join(builder.root, 'out')); shell.rm('-rf', path.join(builder.root, 'out'));
@ -268,6 +257,25 @@ GradleBuilder.prototype.clean = function (opts) {
module.exports = GradleBuilder; module.exports = GradleBuilder;
function suppressJavaOptionsInfo (stdio) {
if (stdio.stderr) {
/*
* Workaround for the issue with Java printing some unwanted information to
* stderr instead of stdout.
* This function suppresses 'Picked up _JAVA_OPTIONS' message from being
* printed to stderr. See https://issues.apache.org/jira/browse/CB-9971 for
* explanation.
*/
var suppressThisLine = /^Picked up _JAVA_OPTIONS: /i.test(stdio.stderr.toString());
if (suppressThisLine) {
return;
}
process.stderr.write(stdio.stderr);
} else {
process.stdout.write(stdio.stdout);
}
}
function isAutoGenerated (file) { function isAutoGenerated (file) {
return fs.existsSync(file) && fs.readFileSync(file, 'utf8').indexOf(MARKER) > 0; return fs.existsSync(file) && fs.readFileSync(file, 'utf8').indexOf(MARKER) > 0;
} }

View File

@ -1,6 +1,7 @@
var Gradle_builder = require('../../../bin/templates/cordova/lib/builders/GradleBuilder.js'); var Gradle_builder = require('../../../bin/templates/cordova/lib/builders/GradleBuilder.js');
var fs = require('fs'); var fs = require('fs');
var Q = require('q');
var superspawn = require('cordova-common').superspawn; var superspawn = require('cordova-common').superspawn;
var builder; var builder;
@ -8,7 +9,8 @@ describe('Gradle Builder', function () {
beforeEach(function () { beforeEach(function () {
spyOn(fs, 'existsSync').and.returnValue(true); spyOn(fs, 'existsSync').and.returnValue(true);
builder = new Gradle_builder('/root'); builder = new Gradle_builder('/root');
spyOn(superspawn, 'spawn'); var deferred = Q.defer();
spyOn(superspawn, 'spawn').and.returnValue(deferred.promise);
}); });
describe('runGradleWrapper method', function () { describe('runGradleWrapper method', function () {