diff --git a/environments/jvm/.gitignore b/environments/jvm/.gitignore
new file mode 100644
index 00000000..e0a3199d
--- /dev/null
+++ b/environments/jvm/.gitignore
@@ -0,0 +1,7 @@
+.springBeans
+.project
+.mvn
+.settings
+.classpath
+target/
+bin/
diff --git a/environments/jvm/Dockerfile b/environments/jvm/Dockerfile
new file mode 100644
index 00000000..d9f7985b
--- /dev/null
+++ b/environments/jvm/Dockerfile
@@ -0,0 +1,10 @@
+FROM maven:3.5-jdk-8 as BUILD
+COPY src /usr/src/myapp/src
+COPY pom.xml /usr/src/myapp
+RUN mvn -f /usr/src/myapp/pom.xml clean package
+
+FROM openjdk:8-jdk-alpine
+VOLUME /tmp
+COPY --from=BUILD /usr/src/myapp/target/env-java-0.0.1-SNAPSHOT.jar /app.jar
+ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--server.port=8888"]
+EXPOSE 8888
\ No newline at end of file
diff --git a/environments/jvm/pom.xml b/environments/jvm/pom.xml
new file mode 100644
index 00000000..9834a447
--- /dev/null
+++ b/environments/jvm/pom.xml
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+
+ io.fission
+ env-java
+ 0.0.1-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.1.RELEASE
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ io.fission
+ fission-java-core
+ 0.0.2-SNAPSHOT
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+
+ fission-java-core
+ fission-java-core-snapshot
+ https://oss.sonatype.org/content/repositories/snapshots/
+
+
+
\ No newline at end of file
diff --git a/environments/jvm/src/main/java/io/fission/FunctionLoadRequest.java b/environments/jvm/src/main/java/io/fission/FunctionLoadRequest.java
new file mode 100644
index 00000000..f5276840
--- /dev/null
+++ b/environments/jvm/src/main/java/io/fission/FunctionLoadRequest.java
@@ -0,0 +1,32 @@
+package io.fission;
+
+public class FunctionLoadRequest {
+
+ private String filepath;
+ private String functionName;
+ private String url;
+
+ String getFilepath() {
+ return filepath;
+ }
+
+ void setFilepath(String filepath) {
+ this.filepath = filepath;
+ }
+
+ String getUrl() {
+ return url;
+ }
+
+ void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getFunctionName() {
+ return functionName;
+ }
+
+ public void setFunctionName(String functionName) {
+ this.functionName = functionName;
+ }
+}
diff --git a/environments/jvm/src/main/java/io/fission/Server.java b/environments/jvm/src/main/java/io/fission/Server.java
new file mode 100644
index 00000000..3d752279
--- /dev/null
+++ b/environments/jvm/src/main/java/io/fission/Server.java
@@ -0,0 +1,123 @@
+package io.fission;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.Enumeration;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.springframework.boot.*;
+import org.springframework.boot.autoconfigure.*;
+import org.springframework.http.RequestEntity;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import io.fission.Function;
+
+@RestController
+@EnableAutoConfiguration
+public class Server {
+
+ private Function fn;
+
+ private static final int CLASS_LENGTH = 6;
+
+ private static Logger logger = Logger.getGlobal();
+
+ @RequestMapping(value = "/", method = { RequestMethod.GET, RequestMethod.POST, RequestMethod.DELETE,
+ RequestMethod.PUT })
+ ResponseEntity