From a7159a119aeb84433967c44516bf1326a440aaa2 Mon Sep 17 00:00:00 2001 From: David Whitlock Date: Thu, 1 Jan 2026 10:28:02 -0800 Subject: [PATCH 1/3] Improve the out-of-the-box error message for the main methods in the projects so that it's clear that the main method actually executes. --- .../resources/archetype-resources/src/it/java/Project1IT.java | 2 +- .../resources/archetype-resources/src/main/java/Project1.java | 2 +- .../src/test/resources/projects/basic/verify.groovy | 2 +- .../resources/archetype-resources/src/it/java/Project1IT.java | 2 +- .../resources/archetype-resources/src/main/java/Project1.java | 2 +- .../src/test/resources/projects/basic/verify.groovy | 2 +- .../resources/archetype-resources/src/it/java/Project1IT.java | 2 +- .../resources/archetype-resources/src/main/java/Project1.java | 2 +- .../src/test/resources/projects/basic/verify.groovy | 2 +- .../airline/src/it/java/edu/pdx/cs/joy/airline/Project1IT.java | 2 +- .../airline/src/main/java/edu/pdx/cs/joy/airline/Project1.java | 2 +- .../src/it/java/edu/pdx/cs/joy/apptbook/Project1IT.java | 2 +- .../src/main/java/edu/pdx/cs/joy/apptbook/Project1.java | 2 +- .../src/it/java/edu/pdx/cs/joy/phonebill/Project1IT.java | 2 +- .../src/main/java/edu/pdx/cs/joy/phonebill/Project1.java | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/projects-parent/archetypes-parent/airline-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java b/projects-parent/archetypes-parent/airline-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java index 546491d6f..67ab1c7fa 100644 --- a/projects-parent/archetypes-parent/airline-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java +++ b/projects-parent/archetypes-parent/airline-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java @@ -27,7 +27,7 @@ private MainMethodResult invokeMain(String... args) { @Test void testNoCommandLineArguments() { MainMethodResult result = invokeMain(); - assertThat(result.getTextWrittenToStandardError(), containsString("Missing command line arguments")); + assertThat(result.getTextWrittenToStandardError(), containsString("Missing airline information")); } } \ No newline at end of file diff --git a/projects-parent/archetypes-parent/airline-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java b/projects-parent/archetypes-parent/airline-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java index 5ef72344a..ecc1224d2 100644 --- a/projects-parent/archetypes-parent/airline-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java +++ b/projects-parent/archetypes-parent/airline-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java @@ -17,7 +17,7 @@ static boolean isValidDateAndTime(String dateAndTime) { public static void main(String[] args) { Flight flight = new Flight(); // Refer to one of Dave's classes so that we can be sure it is on the classpath - System.err.println("Missing command line arguments"); + System.err.println("Missing airline information"); for (String arg : args) { System.out.println(arg); } diff --git a/projects-parent/archetypes-parent/airline-archetype/src/test/resources/projects/basic/verify.groovy b/projects-parent/archetypes-parent/airline-archetype/src/test/resources/projects/basic/verify.groovy index 55b51cc33..0c8ce76ac 100644 --- a/projects-parent/archetypes-parent/airline-archetype/src/test/resources/projects/basic/verify.groovy +++ b/projects-parent/archetypes-parent/airline-archetype/src/test/resources/projects/basic/verify.groovy @@ -13,6 +13,6 @@ String jarCommand = "java -jar ${projectDir}/target/basic-0.1-SNAPSHOT.jar" def execution = jarCommand.execute() execution.waitFor() String stderr = execution.err.text -if (!stderr.contains("Missing command line arguments")) { +if (!stderr.contains("Missing airline information")) { throw new IllegalStateException("Running jar returned \"" + stderr + "\""); } \ No newline at end of file diff --git a/projects-parent/archetypes-parent/apptbook-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java b/projects-parent/archetypes-parent/apptbook-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java index 7e601a9f4..849450131 100644 --- a/projects-parent/archetypes-parent/apptbook-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java +++ b/projects-parent/archetypes-parent/apptbook-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java @@ -27,7 +27,7 @@ private MainMethodResult invokeMain(String... args) { @Test void testNoCommandLineArguments() { MainMethodResult result = invokeMain(); - assertThat(result.getTextWrittenToStandardError(), containsString("Missing command line arguments")); + assertThat(result.getTextWrittenToStandardError(), containsString("Missing appointment book information")); } } \ No newline at end of file diff --git a/projects-parent/archetypes-parent/apptbook-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java b/projects-parent/archetypes-parent/apptbook-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java index 544e23df8..fe2b5b91d 100644 --- a/projects-parent/archetypes-parent/apptbook-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java +++ b/projects-parent/archetypes-parent/apptbook-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java @@ -17,7 +17,7 @@ static boolean isValidDateAndTime(String dateAndTime) { public static void main(String[] args) { Appointment appointment = new Appointment(); // Refer to one of Dave's classes so that we can be sure it is on the classpath - System.err.println("Missing command line arguments"); + System.err.println("Missing appointment book information"); for (String arg : args) { System.out.println(arg); } diff --git a/projects-parent/archetypes-parent/apptbook-archetype/src/test/resources/projects/basic/verify.groovy b/projects-parent/archetypes-parent/apptbook-archetype/src/test/resources/projects/basic/verify.groovy index 55b51cc33..9f20632aa 100644 --- a/projects-parent/archetypes-parent/apptbook-archetype/src/test/resources/projects/basic/verify.groovy +++ b/projects-parent/archetypes-parent/apptbook-archetype/src/test/resources/projects/basic/verify.groovy @@ -13,6 +13,6 @@ String jarCommand = "java -jar ${projectDir}/target/basic-0.1-SNAPSHOT.jar" def execution = jarCommand.execute() execution.waitFor() String stderr = execution.err.text -if (!stderr.contains("Missing command line arguments")) { +if (!stderr.contains("Missing appointment book information")) { throw new IllegalStateException("Running jar returned \"" + stderr + "\""); } \ No newline at end of file diff --git a/projects-parent/archetypes-parent/phonebill-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java b/projects-parent/archetypes-parent/phonebill-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java index eba5ed5d5..a30d20646 100644 --- a/projects-parent/archetypes-parent/phonebill-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java +++ b/projects-parent/archetypes-parent/phonebill-archetype/src/main/resources/archetype-resources/src/it/java/Project1IT.java @@ -27,7 +27,7 @@ private MainMethodResult invokeMain(String... args) { @Test void testNoCommandLineArguments() { MainMethodResult result = invokeMain(); - assertThat(result.getTextWrittenToStandardError(), containsString("Missing command line arguments")); + assertThat(result.getTextWrittenToStandardError(), containsString("Missing phone bill information")); } } \ No newline at end of file diff --git a/projects-parent/archetypes-parent/phonebill-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java b/projects-parent/archetypes-parent/phonebill-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java index 1c5337ddb..677ffb69d 100644 --- a/projects-parent/archetypes-parent/phonebill-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java +++ b/projects-parent/archetypes-parent/phonebill-archetype/src/main/resources/archetype-resources/src/main/java/Project1.java @@ -17,7 +17,7 @@ static boolean isValidDateAndTime(String dateAndTime) { public static void main(String[] args) { PhoneCall call = new PhoneCall(); // Refer to one of Dave's classes so that we can be sure it is on the classpath - System.err.println("Missing command line arguments"); + System.err.println("Missing phone bill information"); for (String arg : args) { System.out.println(arg); } diff --git a/projects-parent/archetypes-parent/phonebill-archetype/src/test/resources/projects/basic/verify.groovy b/projects-parent/archetypes-parent/phonebill-archetype/src/test/resources/projects/basic/verify.groovy index 55b51cc33..81246017f 100644 --- a/projects-parent/archetypes-parent/phonebill-archetype/src/test/resources/projects/basic/verify.groovy +++ b/projects-parent/archetypes-parent/phonebill-archetype/src/test/resources/projects/basic/verify.groovy @@ -13,6 +13,6 @@ String jarCommand = "java -jar ${projectDir}/target/basic-0.1-SNAPSHOT.jar" def execution = jarCommand.execute() execution.waitFor() String stderr = execution.err.text -if (!stderr.contains("Missing command line arguments")) { +if (!stderr.contains("Missing phone bill information")) { throw new IllegalStateException("Running jar returned \"" + stderr + "\""); } \ No newline at end of file diff --git a/projects-parent/originals-parent/airline/src/it/java/edu/pdx/cs/joy/airline/Project1IT.java b/projects-parent/originals-parent/airline/src/it/java/edu/pdx/cs/joy/airline/Project1IT.java index 884e9ccf3..a5ad79ba8 100644 --- a/projects-parent/originals-parent/airline/src/it/java/edu/pdx/cs/joy/airline/Project1IT.java +++ b/projects-parent/originals-parent/airline/src/it/java/edu/pdx/cs/joy/airline/Project1IT.java @@ -24,7 +24,7 @@ private MainMethodResult invokeMain(String... args) { @Test void testNoCommandLineArguments() { MainMethodResult result = invokeMain(); - assertThat(result.getTextWrittenToStandardError(), containsString("Missing command line arguments")); + assertThat(result.getTextWrittenToStandardError(), containsString("Missing airline information")); } } \ No newline at end of file diff --git a/projects-parent/originals-parent/airline/src/main/java/edu/pdx/cs/joy/airline/Project1.java b/projects-parent/originals-parent/airline/src/main/java/edu/pdx/cs/joy/airline/Project1.java index dfe2607f5..b4542da3c 100644 --- a/projects-parent/originals-parent/airline/src/main/java/edu/pdx/cs/joy/airline/Project1.java +++ b/projects-parent/originals-parent/airline/src/main/java/edu/pdx/cs/joy/airline/Project1.java @@ -14,7 +14,7 @@ static boolean isValidDateAndTime(String dateAndTime) { public static void main(String[] args) { Flight flight = new Flight(); // Refer to one of Dave's classes so that we can be sure it is on the classpath - System.err.println("Missing command line arguments"); + System.err.println("Missing airline information"); for (String arg : args) { System.out.println(arg); } diff --git a/projects-parent/originals-parent/apptbook/src/it/java/edu/pdx/cs/joy/apptbook/Project1IT.java b/projects-parent/originals-parent/apptbook/src/it/java/edu/pdx/cs/joy/apptbook/Project1IT.java index fee1d5e2c..a74c0af66 100644 --- a/projects-parent/originals-parent/apptbook/src/it/java/edu/pdx/cs/joy/apptbook/Project1IT.java +++ b/projects-parent/originals-parent/apptbook/src/it/java/edu/pdx/cs/joy/apptbook/Project1IT.java @@ -24,7 +24,7 @@ private MainMethodResult invokeMain(String... args) { @Test void testNoCommandLineArguments() { MainMethodResult result = invokeMain(); - assertThat(result.getTextWrittenToStandardError(), containsString("Missing command line arguments")); + assertThat(result.getTextWrittenToStandardError(), containsString("Missing appointment book information")); } } \ No newline at end of file diff --git a/projects-parent/originals-parent/apptbook/src/main/java/edu/pdx/cs/joy/apptbook/Project1.java b/projects-parent/originals-parent/apptbook/src/main/java/edu/pdx/cs/joy/apptbook/Project1.java index 67eb7f834..55624ce7e 100644 --- a/projects-parent/originals-parent/apptbook/src/main/java/edu/pdx/cs/joy/apptbook/Project1.java +++ b/projects-parent/originals-parent/apptbook/src/main/java/edu/pdx/cs/joy/apptbook/Project1.java @@ -14,7 +14,7 @@ static boolean isValidDateAndTime(String dateAndTime) { public static void main(String[] args) { Appointment appointment = new Appointment(); // Refer to one of Dave's classes so that we can be sure it is on the classpath - System.err.println("Missing command line arguments"); + System.err.println("Missing appointment book information"); for (String arg : args) { System.out.println(arg); } diff --git a/projects-parent/originals-parent/phonebill/src/it/java/edu/pdx/cs/joy/phonebill/Project1IT.java b/projects-parent/originals-parent/phonebill/src/it/java/edu/pdx/cs/joy/phonebill/Project1IT.java index d9d375f3d..9b179166d 100644 --- a/projects-parent/originals-parent/phonebill/src/it/java/edu/pdx/cs/joy/phonebill/Project1IT.java +++ b/projects-parent/originals-parent/phonebill/src/it/java/edu/pdx/cs/joy/phonebill/Project1IT.java @@ -24,7 +24,7 @@ private MainMethodResult invokeMain(String... args) { @Test void testNoCommandLineArguments() { MainMethodResult result = invokeMain(); - assertThat(result.getTextWrittenToStandardError(), containsString("Missing command line arguments")); + assertThat(result.getTextWrittenToStandardError(), containsString("Missing phone bill information")); } } \ No newline at end of file diff --git a/projects-parent/originals-parent/phonebill/src/main/java/edu/pdx/cs/joy/phonebill/Project1.java b/projects-parent/originals-parent/phonebill/src/main/java/edu/pdx/cs/joy/phonebill/Project1.java index eeb3902eb..9c5db2bac 100644 --- a/projects-parent/originals-parent/phonebill/src/main/java/edu/pdx/cs/joy/phonebill/Project1.java +++ b/projects-parent/originals-parent/phonebill/src/main/java/edu/pdx/cs/joy/phonebill/Project1.java @@ -14,7 +14,7 @@ static boolean isValidDateAndTime(String dateAndTime) { public static void main(String[] args) { PhoneCall call = new PhoneCall(); // Refer to one of Dave's classes so that we can be sure it is on the classpath - System.err.println("Missing command line arguments"); + System.err.println("Missing phone bill information"); for (String arg : args) { System.out.println(arg); } From 4728f07392faa2f6ef7f23325e142735ff0d61a1 Mon Sep 17 00:00:00 2001 From: David Whitlock Date: Thu, 1 Jan 2026 10:34:46 -0800 Subject: [PATCH 2/3] Oops. Use the Winter2026 koans-lib artifact. --- .../src/main/resources/archetype-resources/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects-parent/archetypes-parent/java-koans-archetype/src/main/resources/archetype-resources/pom.xml b/projects-parent/archetypes-parent/java-koans-archetype/src/main/resources/archetype-resources/pom.xml index cb9d03212..d8ce4d0ce 100644 --- a/projects-parent/archetypes-parent/java-koans-archetype/src/main/resources/archetype-resources/pom.xml +++ b/projects-parent/archetypes-parent/java-koans-archetype/src/main/resources/archetype-resources/pom.xml @@ -50,7 +50,7 @@ io.github.davidwhitlock.joy.com.sandwich koans-lib - 1.2.2 + 1.2.3-SNAPSHOT From ce593e00744480a6585280990914f3ea86a7e926 Mon Sep 17 00:00:00 2001 From: David Whitlock Date: Thu, 1 Jan 2026 12:04:09 -0800 Subject: [PATCH 3/3] Update some libraries to remove CVEs. --- examples/pom.xml | 2 +- grader/pom.xml | 4 ++-- web/pom.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/pom.xml b/examples/pom.xml index 711e9cd06..0de7c4b55 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -19,7 +19,7 @@ com.sun.mail jakarta.mail - 2.0.1 + 2.0.2 com.google.inject diff --git a/grader/pom.xml b/grader/pom.xml index d4eb30fcf..f3b42add6 100644 --- a/grader/pom.xml +++ b/grader/pom.xml @@ -14,7 +14,7 @@ com.sun.mail jakarta.mail - 2.0.1 + 2.0.2 io.github.davidwhitlock.joy @@ -29,7 +29,7 @@ ch.qos.logback logback-classic - 1.5.12 + 1.5.19 com.google.inject diff --git a/web/pom.xml b/web/pom.xml index 23425e900..1675b212f 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -107,7 +107,7 @@ org.apache.commons commons-fileupload2-jakarta-servlet6 - 2.0.0-M2 + 2.0.0-M4 commons-io