From fde08f012927a0268a42fa6324f1b2c94a08375e Mon Sep 17 00:00:00 2001 From: WANG CHAO <1229983126@qq.com> Date: Wed, 20 Feb 2019 00:05:23 +0800 Subject: [PATCH 1/7] build.gradle: fix checkstyle plugin failure The `checkstyle` plugin of Gradle fails in JDK11 and gives the error below: Unable to create Root Module: config ... The main reason is that, in JDK11, the `user.dir` cannot be reset by Gradle [1]. So, checkstyle plugin is unable to locate the suppressions file correctly. Let's add `config_loc` variable suggested by Gradle to solve the problem [1]. [1] https://github.com/gradle/gradle/issues/8286 --- config/checkstyle/checkstyle.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index dbb5a48249d..24eaeb44965 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -26,7 +26,7 @@ - + From fc3f65dba6206f7a2049820bea957f8f47720602 Mon Sep 17 00:00:00 2001 From: WANG CHAO <1229983126@qq.com> Date: Fri, 8 Feb 2019 21:51:21 +0800 Subject: [PATCH 2/7] build.gradle: add platform-specific javafx runtime dependencies JavaFX is not distributed with Oracle JDK any more from JDK11 onwards [1]. Our code uses javafx as our client platform. So it is unable to be compiled in JDK11 anymore. As we are moving to JDK11, let's add javafx runtime dependencies to gradle. Meanwhile, the dependencies provided are platform specific. Let's use the SystemUtils api provided by Apache [2] to specify the version of javafx dependencies. A buildscript block is also added to declare external dependencies used for the build script [3]. [1] https://blogs.oracle.com/java-platform-group/the-future-of-javafx-and-other-java-client-roadmap-updates [2] http://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html [3] https://docs.gradle.org/current/userguide/tutorial_using_tasks.html#sec:build_script_external_dependencies --- README.adoc | 2 +- build.gradle | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index f458721d572..8b47a8e3793 100644 --- a/README.adoc +++ b/README.adoc @@ -35,6 +35,6 @@ endif::[] * Some parts of this sample application were inspired by the excellent http://code.makery.ch/library/javafx-8-tutorial/[Java FX tutorial] by _Marco Jakob_. -* Libraries used: https://github.com/TestFX/TestFX[TestFX], https://github.com/FasterXML/jackson[Jackson], https://github.com/junit-team/junit5[JUnit5] +* Libraries used: https://openjfx.io/[JavaFX], https://github.com/TestFX/TestFX[TestFX], https://github.com/FasterXML/jackson[Jackson], https://github.com/junit-team/junit5[JUnit5] == Licence : link:LICENSE[MIT] diff --git a/build.gradle b/build.gradle index 1979b395387..7d46e9043ef 100644 --- a/build.gradle +++ b/build.gradle @@ -2,8 +2,18 @@ // For more details take a look at the Java Quickstart chapter in the Gradle // user guide available at http://gradle.org/docs/5.2.1/userguide/tutorial_java_projects.html +import org.apache.commons.lang3.SystemUtils import org.gradle.api.tasks.testing.logging.TestLogEvent +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1' + } +} + plugins { id 'java' id 'jacoco' @@ -41,9 +51,25 @@ test { useJUnitPlatform() } +String platform = SystemUtils.IS_OS_WINDOWS ? 'win' + : SystemUtils.IS_OS_LINUX ? 'linux' + : SystemUtils.IS_OS_MAC ? 'mac' + : null +if (platform == null) { + throw new RuntimeException('The current OS is not supported.') +} + dependencies { String testFxVersion = '4.0.15-alpha' String jUnitVersion = '5.4.0' + String javaFxVersion = '11' + + implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: platform + implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: platform + implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: platform + implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: platform + implementation group: 'org.openjfx', name: 'javafx-media', version: javaFxVersion, classifier: platform + implementation group: 'org.openjfx', name: 'javafx-web', version: javaFxVersion, classifier: platform implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.7.0' implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.7.4' From 12bb91903e71ea1109e04f7369c2169f1c7be39a Mon Sep 17 00:00:00 2001 From: WANG CHAO <1229983126@qq.com> Date: Fri, 8 Feb 2019 22:31:56 +0800 Subject: [PATCH 3/7] Change the entry point of addressbook After adding the javafx runtime dependency, addressbook is still unable to run in a JDK11 environment. It gives an error of below: Error: JavaFX runtime components are missing, and are required to run this application This error comes from sun.launcher.LauncherHelper in the java.base module. The reason for this is that the MainApp extends Application and has a main method. If that is the case, the LauncherHelper will check for the javafx.graphics module to be present as a named module. If that module is not present, the launch is aborted. Hence, having the JavaFX libraries as jars on the classpath is not allowed in this case [1]. This is more like a JDK 11 problem which cannot be solved elegantly. One simple workaround is to have a separate main class that doesn't extend Application. Hence it doesn't do the check on javafx.graphics module, and when the required jars are on the classpath, it works fine. Let's add another main class to be the new entry point of addressbook to solve this problem [2]. [1] http://mail.openjdk.java.net/pipermail/openjfx-dev/2018-June/021977.html [2] https://stackoverflow.com/questions/52653836/maven-shade-javafx-runtime-components-are-missing/52654791#52654791 --- build.gradle | 2 +- docs/DeveloperGuide.adoc | 4 ++-- src/main/java/seedu/address/Main.java | 25 ++++++++++++++++++++++++ src/main/java/seedu/address/MainApp.java | 6 +----- 4 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 src/main/java/seedu/address/Main.java diff --git a/build.gradle b/build.gradle index 7d46e9043ef..fe096b12102 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ plugins { } // Specifies the entry point of the application -mainClassName = 'seedu.address.MainApp' +mainClassName = 'seedu.address.Main' sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index e979e7c9efe..4ae5f160064 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -49,7 +49,7 @@ This will generate all resources required by the application and tests. === Verifying the setup -. Run the `seedu.address.MainApp` and try a few commands +. Run the `seedu.address.Main` and try a few commands . <> to ensure they all pass. === Configurations to do before writing code @@ -111,7 +111,7 @@ The *_Architecture Diagram_* given above explains the high-level design of the A [TIP] The `.pptx` files used to create diagrams in this document can be found in the link:{repoURL}/docs/diagrams/[diagrams] folder. To update a diagram, modify the diagram in the pptx file, select the objects of the diagram, and choose `Save as picture`. -`Main` has only one class called link:{repoURL}/src/main/java/seedu/address/MainApp.java[`MainApp`]. It is responsible for, +`Main` has two classes called link:{repoURL}/src/main/java/seedu/address/Main.java[`Main`] and link:{repoURL}/src/main/java/seedu/address/MainApp.java[`MainApp`]. It is responsible for, * At app launch: Initializes the components in the correct sequence, and connects them up with each other. * At shut down: Shuts down the components and invokes cleanup method where necessary. diff --git a/src/main/java/seedu/address/Main.java b/src/main/java/seedu/address/Main.java new file mode 100644 index 00000000000..052a5068631 --- /dev/null +++ b/src/main/java/seedu/address/Main.java @@ -0,0 +1,25 @@ +package seedu.address; + +import javafx.application.Application; + +/** + * The main entry point to the application. + * + * This is a workaround for the following error when MainApp is made the + * entry point of the application: + * + * Error: JavaFX runtime components are missing, and are required to run this application + * + * The reason is that MainApp extends Application. In that case, the + * LauncherHelper will check for the javafx.graphics module to be present + * as a named module. We don't use JavaFX via the module system so it can't + * find the javafx.graphics module, and so the launch is aborted. + * + * By having a separate main class (Main) that doesn't extend Application + * to be the entry point of the application, we avoid this issue. + */ +public class Main { + public static void main(String[] args) { + Application.launch(MainApp.class, args); + } +} diff --git a/src/main/java/seedu/address/MainApp.java b/src/main/java/seedu/address/MainApp.java index a92d4d5d71f..e5cfb161b73 100644 --- a/src/main/java/seedu/address/MainApp.java +++ b/src/main/java/seedu/address/MainApp.java @@ -32,7 +32,7 @@ import seedu.address.ui.UiManager; /** - * The main entry point to the application. + * Runs the application. */ public class MainApp extends Application { @@ -180,8 +180,4 @@ public void stop() { logger.severe("Failed to save preferences " + StringUtil.getDetails(e)); } } - - public static void main(String[] args) { - launch(args); - } } From cd8ff78b3d83942844425fe12527f8356758c0f6 Mon Sep 17 00:00:00 2001 From: WANG CHAO <1229983126@qq.com> Date: Tue, 19 Feb 2019 23:48:38 +0800 Subject: [PATCH 4/7] build.gradle: add javafx runtime dependency for all platforms We have added the platform-specific javafx runtime dependencies, so the addressbook is able to run locally. However, the jar file generated on one OS cannot run on other OS. The reason is that, after detecting the OS, javafx will try to load platform-specific classes dynamically. Without corresponding javafx dependencies for that other OS, the class loading process will fail. Let's add the javafx runtime dependency for all platforms (MacOS, Window, Linux) so the jar file generated on one OS is able to run in other OS [1]. Following are some key facts that guarantee the solution to work: * Gradle places all dependency JARs on the classpath and the order is not defined by Gradle. * When shadowJar encounters duplicate classes with same package name and same class name, it picks the first one it sees. ShadowJar processes dependency JARs according to their order in classpath. * The platform-specific JARs for different OSs can define the same classes. (e.g. javafx-graphics-11-win.jar and javafx-graphics-11-linux.jar both contain javafx/scene/control/TreeView.class). However, via diffing the contents of the JARs, we have verified that if two JARs define the same class, the class files are also identical to each other. So, it doesn't matter if the TreeView.class from javafx-graphics-11-win.jar or the TreeView.class from javafx-graphics-11-linux.jar is loaded. As such, no matter what order Gradle places JavaFX's JARs on the classpath, we can run and distribute addressbook properly. [1] https://stackoverflow.com/questions/52653836/maven-shade-javafx-runtime-components-are-missing/52654791#52654791 --- build.gradle | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/build.gradle b/build.gradle index fe096b12102..9cad306c073 100644 --- a/build.gradle +++ b/build.gradle @@ -2,18 +2,8 @@ // For more details take a look at the Java Quickstart chapter in the Gradle // user guide available at http://gradle.org/docs/5.2.1/userguide/tutorial_java_projects.html -import org.apache.commons.lang3.SystemUtils import org.gradle.api.tasks.testing.logging.TestLogEvent -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1' - } -} - plugins { id 'java' id 'jacoco' @@ -51,25 +41,29 @@ test { useJUnitPlatform() } -String platform = SystemUtils.IS_OS_WINDOWS ? 'win' - : SystemUtils.IS_OS_LINUX ? 'linux' - : SystemUtils.IS_OS_MAC ? 'mac' - : null -if (platform == null) { - throw new RuntimeException('The current OS is not supported.') -} - dependencies { String testFxVersion = '4.0.15-alpha' String jUnitVersion = '5.4.0' String javaFxVersion = '11' - implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: platform - implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: platform - implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: platform - implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: platform - implementation group: 'org.openjfx', name: 'javafx-media', version: javaFxVersion, classifier: platform - implementation group: 'org.openjfx', name: 'javafx-web', version: javaFxVersion, classifier: platform + implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-media', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-media', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-media', version: javaFxVersion, classifier: 'linux' + implementation group: 'org.openjfx', name: 'javafx-web', version: javaFxVersion, classifier: 'win' + implementation group: 'org.openjfx', name: 'javafx-web', version: javaFxVersion, classifier: 'mac' + implementation group: 'org.openjfx', name: 'javafx-web', version: javaFxVersion, classifier: 'linux' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.7.0' implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.7.4' From 4773ae89670e30416a1af2380c35bce9309df6a1 Mon Sep 17 00:00:00 2001 From: WANG CHAO <1229983126@qq.com> Date: Thu, 21 Mar 2019 21:53:10 +0800 Subject: [PATCH 5/7] Workaround headless test failure on Windows OS For headless test task, 'prism.order' property is used to choose the graph renderer to use. Currently, we specify this property to be 'sw'. However, this property triggers a bug of openjdk-jfx with headless mode [1]. This property will cause Java Runtime Error for Windows OS including AppVeyor: # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffd95b64879, pid=1476, tid=2640 # # JRE version: OpenJDK Runtime Environment (11.0.1+13) (build 11.0.1+13) # Java VM: OpenJDK 64-Bit Server VM (11.0.1+13, mixed mode, tiered, compressed oops, g1 gc, windows-amd64) # Problematic frame: # C [javafx_font.dll+0x4879] This bug has been identified and will be fixed in future release [2]. There is a workaround suggested which adds static initialization blocks to load required library before any FxToolkit code [3]. Java will initialize base classes first before classes of instance members [4] [5]. For all GUI tests, they uses GuiUnitTest or AddressBookSystemTest as their base class. Let's add the static initialization blocks to these two classes to solve the problem. [1] https://github.com/javafxports/openjdk-jfx/issues/66 [2] https://github.com/javafxports/openjdk-jfx/issues/66#issuecomment-472693380 [3] https://github.com/javafxports/openjdk-jfx/issues/66#issuecomment-468370664 [4] https://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.4 [5] https://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.5 --- src/test/java/seedu/address/ui/GuiUnitTest.java | 9 +++++++++ src/test/java/systemtests/AddressBookSystemTest.java | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/test/java/seedu/address/ui/GuiUnitTest.java b/src/test/java/seedu/address/ui/GuiUnitTest.java index aefb6ac9073..3c49536fe7c 100644 --- a/src/test/java/seedu/address/ui/GuiUnitTest.java +++ b/src/test/java/seedu/address/ui/GuiUnitTest.java @@ -13,6 +13,15 @@ * A GUI unit test class for AddressBook. */ public abstract class GuiUnitTest { + // TODO: Remove this workaround after using JavaFX version 13 or above + // This is a workaround to solve headless test failure on Windows OS + // Refer to https://github.com/javafxports/openjdk-jfx/issues/66 for more details. + static { + if (System.getProperty("os.name").toLowerCase().startsWith("win")) { + System.loadLibrary("WindowsCodecs"); + } + } + @RegisterExtension public final UiPartExtension uiPartExtension = new UiPartExtension(); diff --git a/src/test/java/systemtests/AddressBookSystemTest.java b/src/test/java/systemtests/AddressBookSystemTest.java index 926659f53af..7877c065a75 100644 --- a/src/test/java/systemtests/AddressBookSystemTest.java +++ b/src/test/java/systemtests/AddressBookSystemTest.java @@ -46,6 +46,15 @@ * for test verification. */ public abstract class AddressBookSystemTest { + // TODO: Remove this workaround after using JavaFX version 13 or above + // This is a workaround to solve headless test failure on Windows OS + // Refer to https://github.com/javafxports/openjdk-jfx/issues/66 for more details. + static { + if (System.getProperty("os.name").toLowerCase().startsWith("win")) { + System.loadLibrary("WindowsCodecs"); + } + } + @RegisterExtension public static ClockExtension clockExtension = new ClockExtension(); From 09837d98cc0443a75e7291e6aceb76764e18ca04 Mon Sep 17 00:00:00 2001 From: WANG CHAO <1229983126@qq.com> Date: Tue, 23 Apr 2019 20:02:31 +0800 Subject: [PATCH 6/7] Workaround coveralls upload failure on Travis CI Our Travis CI builds are configured to run the Gradle `coveralls` task to upload test coverage information to coveralls.io. However, when our Travis CI builds are also configured to use JDK 11, the following error occurs when running the `coveralls` task: > Task :coveralls FAILED service name: travis-ci service job id: 520624518 repo token: null FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':coveralls'. > javax.net.ssl.SSLProtocolException: Connection reset by peer (Write failed) This is because JDK 11 implements support for TLS v1.3 [1], and will attempt to use it if the server also supports it (coveralls.io does). However, a bug [2] in its TLS v1.3 implementation causes it to send invalid data to coveralls.io. When coveralls.io receives this invalid data, it terminates the connection, hence the error occurs. Let's workaround this problem by disabling TLS v1.3 support in the JDK. This workaround should be fine for now, since not many servers support TLS v1.3 yet as the TLS v1.3 spec was only published on Aug 2018 [3]. Furthermore, JDK developers have already acknowledged the bug [2] and targeted its fix for JDK 13 (i.e. in the near future). [1] http://openjdk.java.net/jeps/332 [2] https://bugs.openjdk.java.net/browse/JDK-8221253 [3] https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3 Co-authored-by: Paul Tan --- gradle.properties | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gradle.properties b/gradle.properties index 8bee08b60de..40764dc1791 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,6 @@ org.gradle.parallel=false org.gradle.jvmargs=-XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Xmx1024m -Dfile.encoding=utf-8 + +# TODO: This is a workaround for a JDK11 bug which causes test coverage upload to fail. +# Remove it when https://bugs.openjdk.java.net/browse/JDK-8221253 is fixed. +systemProp.jdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" From 0364a89d3a4d9fe7176e4d08a20be0f4d6a0eab0 Mon Sep 17 00:00:00 2001 From: WANG CHAO <1229983126@qq.com> Date: Wed, 20 Feb 2019 00:21:45 +0800 Subject: [PATCH 7/7] Upgrade to JDK 11 We currently advertise that we support "JDK 8". However, the public updates of Java SE 8 for personal users will end soon [1]. JDK 11 is the next Long-Term-Support (LTS) release after JDK 8 [1]. It is better for us to keep updated with the latest release of JDK. Let's update our target JDK to version 11, with the following steps: * We use openjfx-monocle version jdk-11+26 since that is the latest version of openjfx-monocle that supports JDK 11 [2]. * We bump the target and source compatibility of Gradle to JDK11. * We update Travis and AppVeyor configs to use JDK11 as runtime environment. * We remove the add-on in Travis config because it is redundant for JDK 11 [3]. * We make it clear in the User Guide / Developer Guide that we only support JDK 11 and above (not JDK 8, 9, 10). [1] https://www.oracle.com/technetwork/java/java-se-support-roadmap.html [2] https://github.com/TestFX/Monocle [3] https://docs.travis-ci.com/user/languages/java/#using-java-10-and-later --- .travis.yml | 7 +------ appveyor.yml | 2 +- build.gradle | 6 +++--- docs/DeveloperGuide.adoc | 9 ++------- docs/UserGuide.adoc | 7 +------ 5 files changed, 8 insertions(+), 23 deletions(-) diff --git a/.travis.yml b/.travis.yml index c9af1c26c73..e8b4b8c1e8f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: java matrix: include: - - jdk: oraclejdk8 + - jdk: oraclejdk11 script: >- ./config/travis/run-checks.sh && @@ -14,11 +14,6 @@ deploy: on: branch: master -addons: - apt: - packages: - - oracle-java8-installer - before_cache: - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ diff --git a/appveyor.yml b/appveyor.yml index 62c6b2d5660..461bc7483e7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,7 +11,7 @@ test_script: - gradlew.bat --no-daemon headless allTests environment: - JAVA_HOME: C:\Program Files\Java\jdk1.8.0 # Use 64-bit Java + JAVA_HOME: C:\Program Files\Java\jdk11 # Use 64-bit Java # Files/folders to preserve between builds to speed them up cache: diff --git a/build.gradle b/build.gradle index 9cad306c073..600180d854b 100644 --- a/build.gradle +++ b/build.gradle @@ -17,8 +17,8 @@ plugins { // Specifies the entry point of the application mainClassName = 'seedu.address.Main' -sourceCompatibility = JavaVersion.VERSION_1_8 -targetCompatibility = JavaVersion.VERSION_1_8 +sourceCompatibility = JavaVersion.VERSION_11 +targetCompatibility = JavaVersion.VERSION_11 repositories { mavenCentral() @@ -72,7 +72,7 @@ dependencies { testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: jUnitVersion - testRuntimeOnly group: 'org.testfx', name: 'openjfx-monocle', version: '8u76-b04' + testRuntimeOnly group: 'org.testfx', name: 'openjfx-monocle', version: 'jdk-11+26' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: jUnitVersion } diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 4ae5f160064..42c4d14612e 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -20,12 +20,7 @@ By: `Team SE-EDU`      Since: `Jun 2016`      Licence: `MIT` === Prerequisites -. *JDK `8`* (revision `1.8.0_201` or later) -+ -[NOTE] -Only JDK 8 is supported. + -This app will not work with later major JDK releases such as JDK 9, 10, 11, etc. -+ +. *JDK `11`* or above . *IntelliJ* IDE + [NOTE] @@ -881,7 +876,7 @@ _{More to be added}_ [appendix] == Non Functional Requirements -. Should work on any <> as long as it has Java `8` (revision `1.8.0_201` or higher) installed. +. Should work on any <> as long as it has Java `11` or above installed. . Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage. . A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse. diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index eba4fb3bccd..c8b4be97892 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -22,12 +22,7 @@ AddressBook Level 4 (AB4) is for those who *prefer to use a desktop app for mana == Quick Start -. Ensure you have Java `8` (revision `1.8.0_201` or later) installed in your Computer. -+ -[NOTE] -Only Java 8 is supported. + -This app will not work with later major Java releases such as Java 9, 10, 11, etc. -+ +. Ensure you have Java `11` or above installed in your Computer. . Download the latest `addressbook.jar` link:{repoURL}/releases[here]. . Copy the file to the folder you want to use as the home folder for your Address Book. . Double-click the file to start the app. The GUI should appear in a few seconds.