diff --git a/boost-common/src/main/java/io/openliberty/boost/common/docker/DockerBuildI.java b/boost-common/src/main/java/io/openliberty/boost/common/docker/DockerBuildI.java index 79a0c46d..1459b13f 100644 --- a/boost-common/src/main/java/io/openliberty/boost/common/docker/DockerBuildI.java +++ b/boost-common/src/main/java/io/openliberty/boost/common/docker/DockerBuildI.java @@ -36,16 +36,16 @@ public abstract interface DockerBuildI extends AbstractDockerI { // Default methods - default public void dockerBuild(String dockerizer, DockerClient dockerClient, File projectDirectory, - File outputDirectory, String springBootVersion, boolean pullNewerImage, boolean noCache, + default public void dockerBuild(String dockerizer, String dockerizerJVM, DockerClient dockerClient, File projectDirectory, + File outputDirectory, String javaVersion, String springBootVersion, boolean pullNewerImage, boolean noCache, Map buildArgs, String repository, String tag, DockerParameters params, BoostLoggerI log) throws BoostException { try { File appArchive = getAppArchive(); // Create a Dockerfile for the application - SpringDockerizer springDockerizer = getDockerizer(dockerizer, projectDirectory, outputDirectory, appArchive, - springBootVersion, params, log); + SpringDockerizer springDockerizer = getDockerizer(dockerizer, dockerizerJVM, projectDirectory, outputDirectory, appArchive, + javaVersion, springBootVersion, params, log); springDockerizer.createDockerFile(); springDockerizer.createDockerIgnore(); @@ -56,8 +56,25 @@ default public void dockerBuild(String dockerizer, DockerClient dockerClient, Fi } } - default public SpringDockerizer getDockerizer(String dockerizer, File projectDirectory, File outputDirectory, - File appArchive, String springBootVersion, DockerParameters params, BoostLoggerI log) { + default public SpringDockerizer getDockerizer(String dockerizer, String dockerizerJVM, File projectDirectory, File outputDirectory, + File appArchive, String javaVersion, String springBootVersion, DockerParameters params, BoostLoggerI log) { + + // TODO: This is a bad ugly hack, need a real implementation! + // Things to be done: + // 1. Probably create an abstraction for the JVM type? + // 2. Definitely support more than just Java 8 + if ("1.8".equalsIgnoreCase(javaVersion)) { + log.warn("Right now, boost dockerizer only supports Java 8"); + } + + // Set default to be openj9 + String fromJVM = "FROM adoptopenjdk/openjdk8-openj9"; + if ("graalvm".equalsIgnoreCase(dockerizerJVM)) { + fromJVM = "FROM oracle/graalvm-ce:1.0.0-rc9"; + } + if ("hotspot".equalsIgnoreCase(dockerizerJVM)) { + fromJVM = "FROM openjdk:8-jdk-alpine"; + } // TODO: Needed future enhancements: // 1. Is it Spring or something else? sense with @@ -65,11 +82,11 @@ default public SpringDockerizer getDockerizer(String dockerizer, File projectDir // 2. Use OpenJ9 or HotSpot? sense with property boost.docker.jvm if ("jar".equalsIgnoreCase(dockerizer)) { return new DockerizeSpringBootJar(projectDirectory, outputDirectory, appArchive, springBootVersion, params, - log); + log, fromJVM); } if ("classpath".equalsIgnoreCase(dockerizer)) { return new DockerizeSpringBootClasspath(projectDirectory, outputDirectory, appArchive, springBootVersion, - params, log); + params, log, fromJVM); } // TODO: Maybe don't make the Spring Boot dockerizer default after EE stuff is // added @@ -78,7 +95,7 @@ default public SpringDockerizer getDockerizer(String dockerizer, File projectDir // generic so that they can be applied irrespective of the project type (Spring // vs EE) return new DockerizeLibertySpringBootJar(projectDirectory, outputDirectory, appArchive, springBootVersion, - params, log); + params, log, fromJVM); } /** diff --git a/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/Dockerizer.java b/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/Dockerizer.java index 8d9806c4..8617b0c0 100644 --- a/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/Dockerizer.java +++ b/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/Dockerizer.java @@ -35,12 +35,14 @@ public abstract class Dockerizer { protected final File outputDirectory; protected final File appArchive; protected final BoostLoggerI log; + protected final String fromJVM; - public Dockerizer(File projectDirectory, File outputDirectory, File appArchive, BoostLoggerI log) { + public Dockerizer(File projectDirectory, File outputDirectory, File appArchive, BoostLoggerI log, String fromJVM) { this.projectDirectory = projectDirectory; this.outputDirectory = outputDirectory; this.appArchive = appArchive; this.log = log; + this.fromJVM = fromJVM; } /** diff --git a/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeLibertySpringBootJar.java b/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeLibertySpringBootJar.java index 132aa1e7..aefe8015 100644 --- a/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeLibertySpringBootJar.java +++ b/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeLibertySpringBootJar.java @@ -32,9 +32,10 @@ public class DockerizeLibertySpringBootJar extends SpringDockerizer { private static final String COPY = "COPY "; private static final String RUN = "RUN "; + // This does not actually use fromJVM right now public DockerizeLibertySpringBootJar(File projectDirectory, File outputDirectory, File appArchive, - String springBootVersion, DockerParameters params, BoostLoggerI log) { - super(projectDirectory, outputDirectory, appArchive, springBootVersion, params, log); + String springBootVersion, DockerParameters params, BoostLoggerI log, String fromJVM) { + super(projectDirectory, outputDirectory, appArchive, springBootVersion, params, log, fromJVM); } public Map getBuildArgs() { diff --git a/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeSpringBootClasspath.java b/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeSpringBootClasspath.java index a63b82fb..b82f0823 100644 --- a/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeSpringBootClasspath.java +++ b/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeSpringBootClasspath.java @@ -23,8 +23,8 @@ public class DockerizeSpringBootClasspath extends SpringDockerizer { public DockerizeSpringBootClasspath(File projectDirectory, File outputDirectory, File appArchive, - String springBootVersion, DockerParameters params, BoostLoggerI log) { - super(projectDirectory, outputDirectory, appArchive, springBootVersion, params, log); + String springBootVersion, DockerParameters params, BoostLoggerI log, String fromJVM) { + super(projectDirectory, outputDirectory, appArchive, springBootVersion, params, log, fromJVM); } public Map getBuildArgs() { @@ -36,7 +36,7 @@ public Map getBuildArgs() { public List getDockerfileLines() throws BoostException { ArrayList lines = new ArrayList<>(); lines.add(BOOST_GEN); - lines.add("FROM adoptopenjdk/openjdk8-openj9"); + lines.add(fromJVM); lines.add("VOLUME /tmp"); lines.add("ARG DEPENDENCY=" + params.getDependencyFolder()); lines.add("COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib"); diff --git a/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeSpringBootJar.java b/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeSpringBootJar.java index 1d1d4bf4..03f12147 100644 --- a/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeSpringBootJar.java +++ b/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/DockerizeSpringBootJar.java @@ -23,8 +23,8 @@ public class DockerizeSpringBootJar extends SpringDockerizer { public DockerizeSpringBootJar(File projectDirectory, File outputDirectory, File appArchive, - String springBootVersion, DockerParameters params, BoostLoggerI log) { - super(projectDirectory, outputDirectory, appArchive, springBootVersion, params, log); + String springBootVersion, DockerParameters params, BoostLoggerI log, String fromJVM) { + super(projectDirectory, outputDirectory, appArchive, springBootVersion, params, log, fromJVM); } public Map getBuildArgs() { @@ -36,7 +36,7 @@ public Map getBuildArgs() { public List getDockerfileLines() throws BoostException { ArrayList lines = new ArrayList<>(); lines.add(BOOST_GEN); - lines.add("FROM adoptopenjdk/openjdk8-openj9"); + lines.add(fromJVM); lines.add("VOLUME /tmp"); lines.add("ARG JAR_FILE"); lines.add("COPY ${JAR_FILE} app.jar"); diff --git a/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/SpringDockerizer.java b/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/SpringDockerizer.java index ccca7dec..4c5324bb 100644 --- a/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/SpringDockerizer.java +++ b/boost-common/src/main/java/io/openliberty/boost/common/docker/dockerizer/spring/SpringDockerizer.java @@ -32,8 +32,8 @@ public abstract class SpringDockerizer extends Dockerizer { public final String SPRING_BOOT_VERSION; public final DockerParameters params; - public SpringDockerizer(File projectDirectory, File outputDirectory, File appArchive, String springBootVersion, DockerParameters params, BoostLoggerI log) { - super(projectDirectory, outputDirectory, appArchive, log); + public SpringDockerizer(File projectDirectory, File outputDirectory, File appArchive, String springBootVersion, DockerParameters params, BoostLoggerI log, String fromJVM) { + super(projectDirectory, outputDirectory, appArchive, log, fromJVM); this.SPRING_BOOT_VERSION = springBootVersion; this.params = params; } diff --git a/boost-maven/boost-maven-plugin/pom.xml b/boost-maven/boost-maven-plugin/pom.xml index 908b2359..498b6c38 100644 --- a/boost-maven/boost-maven-plugin/pom.xml +++ b/boost-maven/boost-maven-plugin/pom.xml @@ -22,7 +22,7 @@ io.openliberty.boost boost-common - 0.1.2 + 0.1.3-SNAPSHOT net.wasdev.wlp.maven.plugins diff --git a/boost-maven/boost-maven-plugin/src/main/java/io/openliberty/boost/maven/docker/DockerBuildMojo.java b/boost-maven/boost-maven-plugin/src/main/java/io/openliberty/boost/maven/docker/DockerBuildMojo.java index 265a996c..c2d52522 100644 --- a/boost-maven/boost-maven-plugin/src/main/java/io/openliberty/boost/maven/docker/DockerBuildMojo.java +++ b/boost-maven/boost-maven-plugin/src/main/java/io/openliberty/boost/maven/docker/DockerBuildMojo.java @@ -90,18 +90,27 @@ public class DockerBuildMojo extends AbstractDockerMojo implements DockerBuildI private Map buildArgs; /** - * Sets the type of docker build to run. + * Determine the type of Dockerfile to create.
+ * Supported values are: liberty, jar, classpath */ @Parameter(property = "dockerizer", defaultValue = "liberty") private String dockerizer; + /** + * Determine the JVM to use in the Dockerfile to create.
+ * Supported values are: openj9, hotspot, graalvm + */ + @Parameter(property = "dockerizerJVM", defaultValue = "openj9") + private String dockerizerJVM; + @Override public void execute(DockerClient dockerClient) throws BoostException { File projectDirectory = project.getBasedir(); File outputDirectory = new File(project.getBuild().getDirectory()); + String javaVersion = project.getProperties().getProperty("java.version", "1.8"); String springBootVersion = MavenProjectUtil.findSpringBootVersion(project); DockerParameters params = new DockerParameters("target/dependency"); - dockerBuild(dockerizer, dockerClient, projectDirectory, outputDirectory, springBootVersion, pullNewerImage, + dockerBuild(dockerizer, dockerizerJVM, dockerClient, projectDirectory, outputDirectory, javaVersion, springBootVersion, pullNewerImage, noCache, buildArgs, repository, tag, params, BoostLogger.getInstance()); }