8353681: jpackage suppresses errors when executed with --verbose option

Reviewed-by: almatvee
This commit is contained in:
Alexey Semenyuk 2025-04-04 11:49:57 +00:00
parent 10d1fec3ff
commit cfcb3305f0
3 changed files with 59 additions and 30 deletions

View File

@ -552,16 +552,13 @@ public class Arguments {
generateBundle(bp.getBundleParamsAsMap());
return true;
} catch (Exception e) {
if (Log.isVerbose()) {
Log.verbose(e);
} else {
String msg1 = e.getMessage();
Log.fatalError(msg1);
if (e.getCause() != null && e.getCause() != e) {
String msg2 = e.getCause().getMessage();
if (msg2 != null && !msg1.contains(msg2)) {
Log.fatalError(msg2);
}
Log.verbose(e);
String msg1 = e.getMessage();
Log.fatalError(msg1);
if (e.getCause() != null && e.getCause() != e) {
String msg2 = e.getCause().getMessage();
if (msg2 != null && !msg1.contains(msg2)) {
Log.fatalError(msg2);
}
}
return false;

View File

@ -42,7 +42,6 @@ import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -1174,16 +1173,20 @@ public class JPackageCommand extends CommandArguments<JPackageCommand> {
}
public static Stream<String> stripTimestamps(Stream<String> stream) {
// [HH:mm:ss.SSS]
final Pattern timestampRegexp = Pattern.compile(
"^\\[\\d\\d:\\d\\d:\\d\\d.\\d\\d\\d\\] ");
return stream.map(str -> {
Matcher m = timestampRegexp.matcher(str);
if (m.find()) {
str = str.substring(m.end());
}
return stream.map(JPackageCommand::stripTimestamp);
}
public static String stripTimestamp(String str) {
final var m = TIMESTAMP_REGEXP.matcher(str);
if (m.find()) {
return str.substring(m.end());
} else {
return str;
});
}
}
public static boolean withTimestamp(String str) {
return TIMESTAMP_REGEXP.matcher(str).find();
}
@Override
@ -1279,4 +1282,8 @@ public class JPackageCommand extends CommandArguments<JPackageCommand> {
}).get();
private static final String UNPACKED_PATH_ARGNAME = "jpt-unpacked-folder";
// [HH:mm:ss.SSS]
private static final Pattern TIMESTAMP_REGEXP = Pattern.compile(
"^\\[\\d\\d:\\d\\d:\\d\\d.\\d\\d\\d\\] ");
}

View File

@ -22,32 +22,34 @@
*/
import static jdk.jpackage.test.RunnablePackageTest.Action.CREATE_AND_UNPACK;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import jdk.jpackage.test.TKit;
import jdk.jpackage.internal.util.function.ThrowingConsumer;
import jdk.jpackage.test.Annotations.Parameter;
import jdk.jpackage.test.Annotations.ParameterSupplier;
import jdk.jpackage.test.Annotations.Test;
import jdk.jpackage.test.CannedFormattedString;
import jdk.jpackage.test.Executor;
import jdk.jpackage.test.HelloApp;
import jdk.jpackage.test.JPackageCommand;
import jdk.jpackage.test.JPackageStringBundle;
import jdk.jpackage.test.JavaAppDesc;
import jdk.jpackage.test.PackageTest;
import jdk.jpackage.test.HelloApp;
import jdk.jpackage.test.Executor;
import jdk.jpackage.test.JavaTool;
import jdk.jpackage.test.Annotations.Test;
import jdk.jpackage.test.Annotations.Parameter;
import jdk.jpackage.test.Annotations.ParameterSupplier;
import jdk.jpackage.internal.util.function.ThrowingConsumer;
import jdk.jpackage.test.PackageTest;
import jdk.jpackage.test.TKit;
import jdk.tools.jlink.internal.LinkableRuntimeImage;
import static jdk.jpackage.test.RunnablePackageTest.Action.CREATE_AND_UNPACK;
/*
* @test
@ -228,6 +230,29 @@ public final class BasicTest {
});
}
@Test
@Parameter("false")
@Parameter("true")
public void testErrorsAlwaysPrinted(boolean verbose) {
final var cmd = JPackageCommand.helloAppImage()
.ignoreDefaultVerbose(true)
.useToolProvider(false)
.removeArgumentWithValue("--main-class");
if (verbose) {
cmd.addArgument("--verbose");
}
final var textVerifier = Stream.of(
List.of("error.no-main-class-with-main-jar", "hello.jar"),
List.of("error.no-main-class-with-main-jar.advice", "hello.jar")
).map(args -> {
return JPackageStringBundle.MAIN.cannedFormattedString(args.getFirst(), args.subList(1, args.size()).toArray());
}).map(CannedFormattedString::getValue).map(TKit::assertTextStream).reduce(TKit.TextStreamVerifier::andThen).orElseThrow();
textVerifier.apply(cmd.saveConsoleOutput(true).execute(1).getOutput().stream().filter(Predicate.not(JPackageCommand::withTimestamp)));
}
@Test
public void testNoName() {
final String mainClassName = "Greetings";