urls =
+ GraalVmUrlBuilder.builder().withJavaVersion(this.extension.getJavaVersion())
+ .withVersion(this.extension.getImageVersion()).withPlatform(Platform.detect())
+ .build();
+ downloader.download(urls, toFile);
+ }
+
+ archiveUtils.decompress(toFile.toFile(), buildDirGraalvm.toFile());
- archiveUtils.decompress(toFile.toFile(), buildDirGraalvm.toFile());
+ String folder = getFirstSubdirectory(buildDirGraalvm);
+ Path graalvmBaseDir = buildDirGraalvm.resolve(folder);
- String folder = getFirstSubdirectory(buildDirGraalvm);
- Path graalvmBaseDir = buildDirGraalvm.resolve(folder);
+ Path path = getBuildDirectoryAsPath().resolve("java/main");
+ if (path.toFile().exists()) {
+ deleteDirectory(path);
+ }
- Path path = buildDirectory.resolve("graalvm/java/main");
- if (path.toFile().exists()) {
- deleteDirectory(path);
+ executor.runGuInstallation(getExecOperations(), graalvmBaseDir);
+ executor.runNativeImage(getExecOperations(), getProject(), getBuildDirectoryAsPath(),
+ graalvmBaseDir.toFile(), path.toFile(), getRuntimeClasspath());
}
- executor.runGuInstallation(this.execOperations, graalvmBaseDir);
- executor.runNativeImage(this.execOperations, getProject(), buildDirectory,
- graalvmBaseDir.toFile(), path.toFile());
+ } catch (IOException | InterruptedException e) {
+ throw new ResourceException(e.getMessage(), e);
}
-
- } catch (IOException | InterruptedException e) {
- throw new ResourceException(e.getMessage(), e);
}
}
+ private Path getBuildDirectoryAsPath() {
+ return getBuildDirectory().get().getAsFile().toPath();
+ }
+
private void executeDockerFile() throws IOException, InterruptedException {
DockerService service = new DefaultDockerService();
@@ -167,11 +162,12 @@ private void executeDockerFile() throws IOException, InterruptedException {
}
String dockerfileContent = Files.readString(Path.of(this.extension.getDockerFile()));
- getLogger().info("Generating Dockerfile {}", dockerfileContent);
+ getLogger().info("Generating Dockerfile");
+ getLogger().info("{}", dockerfileContent);
service.removeDockerImage(this.extension.getOutputImageTag());
- Path buildDir = buildDirectory;
+ Path buildDir = getBuildDirectoryAsPath();
service.buildDockerImage(buildDir, this.extension.getOutputImageTag(), dockerfileContent);
service.runDockerImage(buildDir, this.extension.getOutputImageTag());
}
@@ -184,22 +180,24 @@ private void executeDockerImage(NativeImageExecutor executor)
throw new ResourceException("Docker is not running");
}
- executor.buildGraalvmJavaMain(getProject(), buildDirectory);
+ getRuntimeClasspath().forEach(path -> getLogger().info("FOUND PATH: " + path));
+ executor.buildGraalvmJavaMain(getBuildDirectoryAsPath(), getRuntimeClasspath());
DockerfileGenerator.Builder builder =
DockerfileGenerator.builder().baseImage(this.extension.getDockerImage())
- .addNativeImageArgs(this.extension).mainClass(this.extension.getMainClassName());
+ .addNativeImageArgs(this.extension).mainClass(this.extension.getMainClassName().get());
if (this.extension.getOutputFileName() != null) {
builder.addNativeImageArg("-H:Name=" + this.extension.getOutputFileName());
}
- String dockerfileContent = builder.build().generateContents(buildDirectory);
- getLogger().info("Generating Dockerfile {}", dockerfileContent);
+ String dockerfileContent = builder.build().generateContents(getBuildDirectoryAsPath());
+ getLogger().info("Generating Dockerfile");
+ getLogger().info("{}", dockerfileContent);
service.removeDockerImage(this.extension.getOutputImageTag());
- Path buildDir = buildDirectory;
+ Path buildDir = getBuildDirectoryAsPath();
service.buildDockerImage(buildDir, this.extension.getOutputImageTag(), dockerfileContent);
service.runDockerImage(buildDir, this.extension.getOutputImageTag());
}
@@ -233,44 +231,12 @@ private void deleteDirectory(Path pathToBeDeleted) throws IOException {
}
}
- private String getExtension() {
+ private String getFilenameExtension() {
String os = System.getProperty("os.name").toLowerCase();
return os.startsWith("windows") ? "zip" : "tar.gz";
}
private String getFilename() {
- return MessageFormat.format("graalvm-ce.{0}", getExtension());
- }
-
- /**
- * Source Input Directory.
- *
- * @return {@link File}
- */
- @InputDirectory
- public File getSourceFileDir() {
- File file = null;
- String dockerFile = this.extension.getDockerFile();
-
- if (dockerFile != null) {
- Path p = Path.of(dockerFile);
- Path parent = p.getParent();
- file = parent != null ? parent.toFile() : projectDirectory.toFile();
- }
-
- if (file == null) {
- file = projectDirectory.resolve("src").resolve("main").toFile();
- }
-
- return file;
- }
-
- /**
- * Set {@link GraalvmNativeExtension}.
- *
- * @param ext {@link GraalvmNativeExtension}
- */
- public void setExtension(final GraalvmNativeExtension ext) {
- this.extension = ext;
+ return MessageFormat.format("graalvm-ce.{0}", getFilenameExtension());
}
}
diff --git a/src/main/java/com/formkiq/gradle/internal/GradleUtils.java b/src/main/java/com/formkiq/gradle/internal/GradleUtils.java
deleted file mode 100644
index 06b58d7..0000000
--- a/src/main/java/com/formkiq/gradle/internal/GradleUtils.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Copyright [2020] FormKiQ Inc. Licensed under the Apache License, Version 2.0 (the "License"); you
- * may not use this file except in compliance with the License. You may obtain a copy of the License
- * at
- *
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.formkiq.gradle.internal;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Stream;
-import org.gradle.api.Project;
-import org.gradle.api.artifacts.Configuration;
-import org.gradle.api.artifacts.ConfigurationContainer;
-import org.gradle.api.artifacts.UnknownConfigurationException;
-
-/** Gradle Utilities. */
-public class GradleUtils {
-
- /** private constructor. */
- private GradleUtils() {}
-
- /**
- * Get Runtime Class Path Files.
- *
- * @param project {@link Project}
- * @param buildDir {@link Path}
- * @return {@link List} {@link File}
- * @throws IOException IOException
- */
- public static List getRuntimeClasspath(final Project project, final Path buildDir)
- throws IOException {
-
- List files = new ArrayList<>();
-
- Path path = buildDir.resolve("libs");
-
- if (path.toFile().exists()) {
- try (Stream stream = Files.list(path)) {
- files.addAll(stream.map(Path::toFile).toList());
- }
- }
-
- ConfigurationContainer configurations = project.getConfigurations();
- try {
- Configuration runtimeClasspath = configurations.getAt("runtimeClasspath");
- files.addAll(runtimeClasspath.getFiles());
- } catch (UnknownConfigurationException e) {
- // ignore
- }
-
- return files;
- }
-}
diff --git a/src/main/java/com/formkiq/gradle/internal/NativeImageExecutor.java b/src/main/java/com/formkiq/gradle/internal/NativeImageExecutor.java
index 0401bc1..079d599 100644
--- a/src/main/java/com/formkiq/gradle/internal/NativeImageExecutor.java
+++ b/src/main/java/com/formkiq/gradle/internal/NativeImageExecutor.java
@@ -28,6 +28,7 @@
import java.util.List;
import org.apache.tools.ant.helper.DefaultExecutor;
import org.gradle.api.Project;
+import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.internal.os.OperatingSystem;
import org.gradle.process.ExecOperations;
@@ -35,7 +36,7 @@
public class NativeImageExecutor {
/** Graalvm Java Main. */
- public static final String GRAALVM_JAVA_MAIN = "graalvm/java/main";
+ public static final String GRAALVM_JAVA_MAIN = "java/main";
/** {@link GraalvmNativeExtension}. */
private final GraalvmNativeExtension extension;
@@ -77,11 +78,12 @@ public void buildGraalvmImage(final ExecOperations execOperations, final Project
/**
* Build Graalvm classes folder.
*
- * @param project {@link Project}
* @param buildDir {@link Path}
+ * @param runtimeClasspath {@link ConfigurableFileCollection}
*/
- public void buildGraalvmJavaMain(final Project project, final Path buildDir) {
- new RuntimeDependenciesDecompress(project).apply(buildDir);
+ public void buildGraalvmJavaMain(final Path buildDir,
+ final ConfigurableFileCollection runtimeClasspath) {
+ new RuntimeDependenciesDecompress().apply(buildDir, runtimeClasspath);
}
List getBuildGraalvmImageArguments(final Project project, final Path buildDir) {
@@ -96,7 +98,7 @@ List getBuildGraalvmImageArguments(final Project project, final Path bui
args.addAll(new GraalvmClasspathArguments(buildDir).apply(this.extension));
- args.add(this.extension.getMainClassName());
+ args.add(this.extension.getMainClassName().get());
return args;
}
@@ -141,12 +143,14 @@ public void runGuInstallation(final ExecOperations execOperations, final Path gr
* @param buildDir {@link Path}
* @param graalvmBaseDir {@link Files}
* @param outputDir {@link File}
+ * @param runtimeClasspath {@link ConfigurableFileCollection}
* @throws IOException IOException
*/
public void runNativeImage(final ExecOperations execOperations, final Project project,
- final Path buildDir, final File graalvmBaseDir, File outputDir) throws IOException {
+ final Path buildDir, final File graalvmBaseDir, File outputDir,
+ final ConfigurableFileCollection runtimeClasspath) throws IOException {
- buildGraalvmJavaMain(project, buildDir);
+ buildGraalvmJavaMain(buildDir, runtimeClasspath);
buildGraalvmImage(execOperations, project, buildDir, graalvmBaseDir, outputDir);
}
diff --git a/src/main/java/com/formkiq/gradle/services/DefaultDockerService.java b/src/main/java/com/formkiq/gradle/services/DefaultDockerService.java
index 0ecf445..d74f380 100644
--- a/src/main/java/com/formkiq/gradle/services/DefaultDockerService.java
+++ b/src/main/java/com/formkiq/gradle/services/DefaultDockerService.java
@@ -85,7 +85,7 @@ public Path buildDockerImage(final Path buildDir, final String imageTag,
public void runDockerImage(final Path buildDir, final String imageTag)
throws IOException, InterruptedException {
- Path path = buildDir.resolve("graalvm/output");
+ Path path = buildDir.resolve("output");
Files.createDirectories(path);
Volume containerOutputVolume = new Volume("/output");
diff --git a/src/main/java/com/formkiq/gradle/services/DockerService.java b/src/main/java/com/formkiq/gradle/services/DockerService.java
index 25b6d9d..b20826a 100644
--- a/src/main/java/com/formkiq/gradle/services/DockerService.java
+++ b/src/main/java/com/formkiq/gradle/services/DockerService.java
@@ -38,7 +38,7 @@ Path buildDockerImage(Path buildDir, String imageTag, String dockerFileContent)
default Path writeDockerFile(final Path buildDir, final String dockerFileContent)
throws IOException {
- Path dir = buildDir.resolve("graalvm/java/main");
+ Path dir = buildDir.resolve("java/main");
Files.createDirectories(dir);
Path dockerfilePath = Path.of(dir.toString(), "Dockerfile");
diff --git a/src/main/java/com/formkiq/gradle/services/RuntimeDependenciesDecompress.java b/src/main/java/com/formkiq/gradle/services/RuntimeDependenciesDecompress.java
index fa38ae7..c94d47f 100644
--- a/src/main/java/com/formkiq/gradle/services/RuntimeDependenciesDecompress.java
+++ b/src/main/java/com/formkiq/gradle/services/RuntimeDependenciesDecompress.java
@@ -3,53 +3,45 @@
import static com.formkiq.gradle.internal.NativeImageExecutor.GRAALVM_JAVA_MAIN;
import com.formkiq.gradle.internal.ArchiveUtils;
-import com.formkiq.gradle.internal.GradleUtils;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
-import java.util.function.Function;
+import java.util.function.BiFunction;
import java.util.stream.Stream;
import org.gradle.api.Project;
+import org.gradle.api.file.ConfigurableFileCollection;
/** Decompress {@link Project} Runtime Dependencies. */
-public class RuntimeDependenciesDecompress implements Function {
+public class RuntimeDependenciesDecompress
+ implements BiFunction {
/** {@link ArchiveUtils}. */
private final ArchiveUtils archiveUtils = new ArchiveUtils();
- /** {@link Project}. */
- private final Project project;
-
- /**
- * constructor.
- *
- * @param project {@link Project}
- */
- public RuntimeDependenciesDecompress(final Project project) {
- this.project = project;
- }
+ /** constructor. */
+ public RuntimeDependenciesDecompress() {}
@Override
- public Void apply(final Path buildDir) {
+ public Void apply(final Path buildDir, final ConfigurableFileCollection files) {
try {
Path outputPath = buildDir.resolve(GRAALVM_JAVA_MAIN);
File outputdir = outputPath.toFile();
- List classPathFiles = GradleUtils.getRuntimeClasspath(project, buildDir);
-
- for (File file : classPathFiles) {
- archiveUtils.decompressJar(file, outputdir);
+ for (File file : files) {
+ if (file.getName().endsWith(".jar")) {
+ archiveUtils.decompressJar(file.toPath().toFile(), outputdir);
+ }
}
- Path libsDir = buildDir.resolve("libs");
+ Path libsDir = buildDir.resolve("../libs");
try (Stream stream = Files.list(libsDir)) {
- List files = stream.map(Path::toFile).toList();
+ List libFiles = stream.map(Path::toFile).toList();
- for (File file : files) {
+ for (File file : libFiles) {
archiveUtils.decompressJar(file, outputdir);
}
}
diff --git a/src/main/java/com/formkiq/gradle/services/ShellDockerService.java b/src/main/java/com/formkiq/gradle/services/ShellDockerService.java
index 279c866..9a64dd8 100644
--- a/src/main/java/com/formkiq/gradle/services/ShellDockerService.java
+++ b/src/main/java/com/formkiq/gradle/services/ShellDockerService.java
@@ -27,7 +27,7 @@ public boolean isDockerRunning() {
@Override
public void runDockerImage(final Path buildDir, final String imageTag) throws IOException {
- Path dir = buildDir.resolve("graalvm/output");
+ Path dir = buildDir.resolve("output");
Files.createDirectories(dir);
String hostOutputDir = dir.toAbsolutePath().toString();
diff --git a/src/test/java/com/formkiq/gradle/services/DockerServiceTests.java b/src/test/java/com/formkiq/gradle/services/DockerServiceTests.java
index 4c0d53c..a90c2e2 100644
--- a/src/test/java/com/formkiq/gradle/services/DockerServiceTests.java
+++ b/src/test/java/com/formkiq/gradle/services/DockerServiceTests.java
@@ -19,7 +19,7 @@ class DockerServiceTests {
private static final String TEST_IMAGE_NAME = "generated-graalvm-native-plugin";
private static final String DOCKER_IMAGE_24 = "ghcr.io/graalvm/native-image-community:24.0.1";
- private static final Path BUILD_DIR = Paths.get("build");
+ private static final Path BUILD_DIR = Paths.get("build/graalvm");
private static final Path PATH = BUILD_DIR.resolve(GRAALVM_JAVA_MAIN);
@Test