[assemble] package native image as zpi. Resolves #220

This commit is contained in:
Andres Almiray
2021-06-18 19:08:09 +02:00
parent cf218fec02
commit d6664884dd
8 changed files with 47 additions and 22 deletions

View File

@@ -24,6 +24,7 @@ import org.jreleaser.model.NativeImage;
import org.jreleaser.model.Project;
import org.jreleaser.model.assembler.spi.AssemblerProcessingException;
import org.jreleaser.util.Constants;
import org.jreleaser.util.FileUtils;
import org.jreleaser.util.PlatformUtils;
import org.jreleaser.util.Version;
@@ -92,16 +93,16 @@ public class NativeImageAssemblerProcessor extends AbstractAssemblerProcessor<Na
}
private Artifact nativeImage(Path assembleDirectory, Path graalPath, Set<Path> jars) throws AssemblerProcessingException {
String finalImageName = assembler.getExecutable();
context.getLogger().info("- {}", finalImageName);
String executable = assembler.getExecutable();
context.getLogger().info("- {}", executable);
Path image = assembleDirectory.resolve(finalImageName).toAbsolutePath();
Path image = assembleDirectory.resolve(executable).toAbsolutePath();
try {
if (Files.exists(image)) {
Files.deleteIfExists(image);
}
} catch (IOException e) {
throw new AssemblerProcessingException("Could not delete previous image " + finalImageName, e);
throw new AssemblerProcessingException("Could not delete previous image " + executable, e);
}
assembler.getArgs().stream()
@@ -124,7 +125,19 @@ public class NativeImageAssemblerProcessor extends AbstractAssemblerProcessor<Na
cmd.add("-H:Name=" + image.getFileName().toString());
executeCommand(image.getParent(), cmd);
return Artifact.of(image, assembler.getGraal().getPlatform());
try {
Path tempDirectory = Files.createTempDirectory("jreleaser");
Files.copy(image, tempDirectory.resolve(image.getFileName()));
Path imageZip = assembleDirectory.resolve(assembler.getName() + "-" + context.getModel().getProject().getResolvedVersion() + ".zip");
FileUtils.zip(tempDirectory, imageZip);
context.getLogger().debug("- {}", imageZip.getFileName());
return Artifact.of(imageZip, assembler.getGraal().getPlatform());
} catch (IOException e) {
throw new AssemblerProcessingException("Unexpected error", e);
}
}
private String readJavaVersion(Path path) throws AssemblerProcessingException {

View File

@@ -22,9 +22,9 @@ import org.jreleaser.util.Version;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import static org.jreleaser.util.CollectionUtils.safePut;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
@@ -35,7 +35,7 @@ import static org.jreleaser.util.StringUtils.isNotBlank;
* @since 0.2.0
*/
abstract class AbstractAssembler implements Assembler {
protected final Set<Artifact> output = new LinkedHashSet<>();
protected final Set<Artifact> outputs = new TreeSet<>();
private final Map<String, Object> extraProperties = new LinkedHashMap<>();
private final Java java = new Java();
private final String type;
@@ -57,7 +57,7 @@ abstract class AbstractAssembler implements Assembler {
this.name = assembler.name;
this.executable = assembler.executable;
this.templateDirectory = assembler.templateDirectory;
setOutputs(assembler.output);
setOutputs(assembler.outputs);
setJava(assembler.java);
setExtraProperties(assembler.extraProperties);
}
@@ -176,19 +176,19 @@ abstract class AbstractAssembler implements Assembler {
@Override
public Set<Artifact> getOutputs() {
return output;
return outputs;
}
@Override
public void setOutputs(Set<Artifact> output) {
this.output.clear();
this.output.addAll(output);
this.outputs.clear();
this.outputs.addAll(output);
}
@Override
public void addOutput(Artifact artifact) {
if (null != artifact) {
this.output.add(artifact);
this.outputs.add(artifact);
}
}

View File

@@ -31,13 +31,14 @@ import static java.nio.file.Files.exists;
import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.StringUtils.isBlank;
import static org.jreleaser.util.StringUtils.isNotBlank;
/**
* @author Andres Almiray
* @since 0.1.0
*/
public class Artifact implements Domain, ExtraProperties {
public class Artifact implements Domain, ExtraProperties, Comparable<Artifact> {
private final Map<String, Object> extraProperties = new LinkedHashMap<>();
private final Map<Algorithm, String> hashes = new LinkedHashMap<>();
@@ -308,6 +309,15 @@ public class Artifact implements Domain, ExtraProperties {
return Objects.hash(path);
}
@Override
public int compareTo(Artifact that) {
String p1 = this.platform;
String p2 = that.platform;
if (isBlank(p1)) p1 = "";
if (isBlank(p2)) p2 = "";
return p1.compareTo(p2);
}
public static Artifact of(Path resolvedPath) {
Artifact artifact = new Artifact();
artifact.path = resolvedPath.toAbsolutePath().toString();

View File

@@ -28,6 +28,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import static org.jreleaser.util.CollectionUtils.safePut;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
@@ -47,7 +48,7 @@ public class Distribution extends Packagers implements ExtraProperties, Activata
private final List<String> tags = new ArrayList<>();
private final Map<String, Object> extraProperties = new LinkedHashMap<>();
private final Set<Artifact> artifacts = new LinkedHashSet<>();
private final Set<Artifact> artifacts = new TreeSet<>();
private final Java java = new Java();
private Active active;
private boolean enabled;

View File

@@ -20,19 +20,19 @@ package org.jreleaser.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
/**
* @author Andres Almiray
* @since 0.1.0
*/
public class Files implements Domain {
private final Set<Artifact> artifacts = new LinkedHashSet<>();
private final Set<Artifact> artifacts = new TreeSet<>();
private final List<Glob> globs = new ArrayList<>();
private final Set<Artifact> paths = new LinkedHashSet<>();
private final Set<Artifact> paths = new TreeSet<>();
private boolean resolved;
public boolean isEmpty() {

View File

@@ -23,6 +23,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.StringUtils.isNotBlank;
@@ -34,7 +35,7 @@ import static org.jreleaser.util.StringUtils.isNotBlank;
public class Jlink extends AbstractAssembler {
public static final String NAME = "jlink";
private final Set<Artifact> targetJdks = new LinkedHashSet<>();
private final Set<Artifact> targetJdks = new TreeSet<>();
private final Set<String> moduleNames = new LinkedHashSet<>();
private final List<String> args = new ArrayList<>();
private final Artifact jdk = new Artifact();

View File

@@ -35,9 +35,9 @@ import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import static java.nio.file.FileVisitResult.CONTINUE;
@@ -53,7 +53,7 @@ public class Artifacts {
return files.getPaths();
}
Set<Artifact> paths = new LinkedHashSet<>();
Set<Artifact> paths = new TreeSet<>();
// resolve artifacts
for (Artifact artifact : files.getArtifacts()) {
@@ -100,7 +100,7 @@ public class Artifacts {
private final JReleaserLogger logger;
private final List<PathMatcher> matchers;
private final Path basedir;
private final Set<Artifact> artifacts = new LinkedHashSet<>();
private final Set<Artifact> artifacts = new TreeSet<>();
private boolean failed;
private GlobResolver(JReleaserLogger logger, Path basedir, List<PathMatcher> matchers) {

View File

@@ -42,7 +42,7 @@ public abstract class NativeImageResolver extends Validator {
Path image = context.getAssembleDirectory()
.resolve(nativeImage.getName())
.resolve(nativeImage.getType())
.resolve(nativeImage.getExecutable());
.resolve(nativeImage.getName() + "-" + context.getModel().getProject().getResolvedVersion() + ".zip");
if (!Files.exists(image)) {
errors.assembly("Missing outputs for " + nativeImage.getType() + "." + nativeImage.getName() +