mirror of
https://github.com/jlengrand/jreleaser.git
synced 2026-03-10 08:31:24 +00:00
[assemble] package native image as zpi. Resolves #220
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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() +
|
||||
|
||||
Reference in New Issue
Block a user