diff --git a/containers/java-12/.devcontainer/Dockerfile b/containers/java-12/.devcontainer/Dockerfile
new file mode 100644
index 0000000000..e37ad6a913
--- /dev/null
+++ b/containers/java-12/.devcontainer/Dockerfile
@@ -0,0 +1,23 @@
+#-----------------------------------------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# Licensed under the MIT License. See LICENSE in the project root for license information.
+#-----------------------------------------------------------------------------------------
+
+FROM maven:3-jdk-12
+
+# Install git, process tools
+RUN yum update -y && yum install -y git procps unzip
+
+# Install Gradle
+ENV GRADLE_HOME /opt/gradle
+ENV GRADLE_VERSION 5.4
+ARG GRADLE_DOWNLOAD_SHA256=c8c17574245ecee9ed7fe4f6b593b696d1692d1adbfef425bef9b333e3a0e8de
+RUN curl -SL --output gradle.zip "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" \
+ && echo "${GRADLE_DOWNLOAD_SHA256} *gradle.zip" | sha256sum --check - \
+ && unzip gradle.zip \
+ && rm gradle.zip \
+ && mv "gradle-${GRADLE_VERSION}" "${GRADLE_HOME}/" \
+ && ln -s "${GRADLE_HOME}/bin/gradlec" /usr/bin/gradle
+
+# Clean yum cache
+RUN yum clean all
diff --git a/containers/java-12/.devcontainer/devcontainer.json b/containers/java-12/.devcontainer/devcontainer.json
new file mode 100644
index 0000000000..611f4fd9a8
--- /dev/null
+++ b/containers/java-12/.devcontainer/devcontainer.json
@@ -0,0 +1,7 @@
+{
+ "name": "Java 12",
+ "dockerFile": "Dockerfile",
+ "extensions": [
+ "vscjava.vscode-java-pack"
+ ]
+}
diff --git a/containers/java-12/.npmignore b/containers/java-12/.npmignore
new file mode 100644
index 0000000000..1d72d293eb
--- /dev/null
+++ b/containers/java-12/.npmignore
@@ -0,0 +1,4 @@
+README.md
+test-project
+.vscode
+.npmignore
diff --git a/containers/java-12/.vscode/launch.json b/containers/java-12/.vscode/launch.json
new file mode 100644
index 0000000000..3f8409dd3e
--- /dev/null
+++ b/containers/java-12/.vscode/launch.json
@@ -0,0 +1,15 @@
+{
+ "configurations": [
+ {
+ "type": "java",
+ "name": "Launch App",
+ "request": "launch",
+ "cwd": "${workspaceFolder}/test-project",
+ "console": "internalConsole",
+ "stopOnEntry": false,
+ "mainClass": "com.mycompany.app.App",
+ "args": "",
+ "projectName": "my-app"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/containers/java-12/README.md b/containers/java-12/README.md
new file mode 100644
index 0000000000..972f2f5287
--- /dev/null
+++ b/containers/java-12/README.md
@@ -0,0 +1,55 @@
+# Java 12
+
+## Summary
+
+*Develop Java applications. Includes the JDK 12, Maven and Gradle build tools.*
+
+| Metadata | Value |
+|----------|-------|
+| *Contributors* | The VS Code Java Team |
+| *Definition type* | Dockerfile |
+| *Languages, platforms* | Java, Maven, Gradle |
+
+## Using this definition with an existing folder
+
+Note that only the integrated terminal is supported by the Remote - Containers extension. You may need to modify `launch.json` configurations to include the following value if an external console is used.
+
+```json
+"console": "integratedTerminal"
+```
+
+Beyond that, just follow these steps to use the definition:
+
+1. If this is your first time using a development container, please follow the [getting started steps](https://aka.ms/vscode-remote/containers/getting-started) to set up your machine.
+
+2. To use VS Code's copy of this definition:
+ 1. Start VS Code and open your project folder.
+ 2. Press F1 select and **Remote-Containers: Create Container Configuration File...** from the command palette.
+ 3. Select the Java 12 definition.
+
+3. To use latest-and-greatest copy of this definition from the repository:
+ 1. Clone this repository.
+ 2. Copy the contents of `containers/java-12/.devcontainer` to the root of your project folder.
+ 3. Start VS Code and open your project folder.
+
+4. After following step 2 or 3, the contents of the `.devcontainer` folder in your project can be adapted to meet your needs.
+
+5. Finally, press F1 and run **Remote-Containers: Reopen Folder in Container** to start using the definition.
+
+## Testing the definition
+
+This definition includes some test code that will help you verify it is working as expected on your system. Follow these steps:
+
+1. If this is your first time using a development container, please follow the [getting started steps](https://aka.ms/vscode-remote/containers/getting-started) to set up your machine.
+2. Clone this repository.
+3. Start VS Code, press F1, and select **Remote-Containers: Open Folder in Container...**
+4. Select the `containers/java-12` folder.
+5. After the folder has opened in the container, press F5 to start the project.
+6. You should see "Hello Weekday" in the Debug Console after the program executes.
+7. From here, you can add breakpoints or edit the contents of the `test-project` folder to do further testing.
+
+## License
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Licensed under the MIT License. See [LICENSE](https://github.com/Microsoft/vscode-dev-containers/blob/master/LICENSE).
diff --git a/containers/java-12/test-project/.classpath b/containers/java-12/test-project/.classpath
new file mode 100644
index 0000000000..c8a5e37978
--- /dev/null
+++ b/containers/java-12/test-project/.classpath
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/containers/java-12/test-project/.gitignore b/containers/java-12/test-project/.gitignore
new file mode 100644
index 0000000000..1de565933b
--- /dev/null
+++ b/containers/java-12/test-project/.gitignore
@@ -0,0 +1 @@
+target
\ No newline at end of file
diff --git a/containers/java-12/test-project/.project b/containers/java-12/test-project/.project
new file mode 100644
index 0000000000..700a32c79d
--- /dev/null
+++ b/containers/java-12/test-project/.project
@@ -0,0 +1,23 @@
+
+
+ my-app
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/containers/java-12/test-project/.settings/org.eclipse.jdt.apt.core.prefs b/containers/java-12/test-project/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000000..d4313d4b25
--- /dev/null
+++ b/containers/java-12/test-project/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/containers/java-12/test-project/.settings/org.eclipse.jdt.core.prefs b/containers/java-12/test-project/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..dde555808e
--- /dev/null
+++ b/containers/java-12/test-project/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=12
+org.eclipse.jdt.core.compiler.compliance=12
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=enabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=12
diff --git a/containers/java-12/test-project/.settings/org.eclipse.m2e.core.prefs b/containers/java-12/test-project/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000..f897a7f1cb
--- /dev/null
+++ b/containers/java-12/test-project/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/containers/java-12/test-project/pom.xml b/containers/java-12/test-project/pom.xml
new file mode 100644
index 0000000000..fedd21958c
--- /dev/null
+++ b/containers/java-12/test-project/pom.xml
@@ -0,0 +1,46 @@
+
+ 4.0.0
+ com.mycompany.app
+ my-app
+ jar
+ 1.0-SNAPSHOT
+ my-app
+ http://maven.apache.org
+
+
+ 12
+ 12
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.0.0-M3
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.0
+
+
+ 12
+ --enable-preview
+
+
+
+
+
+
diff --git a/containers/java-12/test-project/src/main/java/com/mycompany/app/App.java b/containers/java-12/test-project/src/main/java/com/mycompany/app/App.java
new file mode 100644
index 0000000000..a72ca38b25
--- /dev/null
+++ b/containers/java-12/test-project/src/main/java/com/mycompany/app/App.java
@@ -0,0 +1,23 @@
+/*----------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See LICENSE in the project root for license information.
+ *---------------------------------------------------------------------------------------*/
+
+package com.mycompany.app;
+
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println("Hello " + getDay(DAY_OF_WEEK.FRIDAY));
+ }
+
+ static String getDay(DAY_OF_WEEK dayOfWeek) {
+ return switch (dayOfWeek) {
+ case MONDAY, TUESDAY, WEDNESDAY, THRUSDAY, FRIDAY -> "Weekday";
+ case SATURDAY, SUNDAY -> "Weekend";
+ };
+ }
+
+ static enum DAY_OF_WEEK { MONDAY, TUESDAY, WEDNESDAY, THRUSDAY, FRIDAY, SATURDAY, SUNDAY};
+}
diff --git a/containers/java-12/test-project/src/test/java/com/mycompany/app/AppTest.java b/containers/java-12/test-project/src/test/java/com/mycompany/app/AppTest.java
new file mode 100644
index 0000000000..a315bb5b36
--- /dev/null
+++ b/containers/java-12/test-project/src/test/java/com/mycompany/app/AppTest.java
@@ -0,0 +1,23 @@
+package com.mycompany.app;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+
+public class AppTest
+{
+ public AppTest() {
+ }
+
+ @Test
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+
+ @Test
+ public void testMore()
+ {
+ assertTrue( true );
+ }
+}