added system properties support

This commit is contained in:
2022-03-16 23:05:23 +08:00
parent f25606a11a
commit bedff34ecf
6 changed files with 69 additions and 24 deletions

View File

@@ -1,23 +1,5 @@
package net.woggioni.gradle.envelope;
import java.io.File;
import java.io.InputStream;
import java.security.MessageDigest;
import java.util.Base64;
import java.util.Collections;
import java.util.Map;
import java.util.Objects;
import java.util.Properties;
import java.util.Set;
import java.util.function.Supplier;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
@@ -38,6 +20,25 @@ import org.gradle.api.tasks.WorkResult;
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
import org.gradle.util.GradleVersion;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import java.io.File;
import java.io.InputStream;
import java.security.MessageDigest;
import java.util.Base64;
import java.util.Collections;
import java.util.Map;
import java.util.Objects;
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;
import java.util.function.Supplier;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import static java.util.zip.Deflater.BEST_COMPRESSION;
import static java.util.zip.Deflater.NO_COMPRESSION;
@@ -62,6 +63,9 @@ public class EnvelopeJarTask extends AbstractArchiveTask {
private final Properties javaAgents = new Properties();
@Getter(onMethod_ = {@Input})
private final Map<String, String> systemProperties = new TreeMap<>();
@Input
public Set<Map.Entry<Object, Object>> getJavaAgents() {
return Collections.unmodifiableSet(javaAgents.entrySet());
@@ -71,6 +75,10 @@ public class EnvelopeJarTask extends AbstractArchiveTask {
javaAgents.put(className, args);
}
public void systemProperty(String key, String value) {
systemProperties.put(key, value);
}
public void includeLibraries(Object... files) {
into(Constants.LIBRARIES_FOLDER, (copySpec) -> copySpec.from(files));
}
@@ -86,7 +94,6 @@ public class EnvelopeJarTask extends AbstractArchiveTask {
getArchiveExtension().convention("jar");
getArchiveVersion().convention(getProject().getVersion().toString());
getArchiveAppendix().convention("envelope");
exclude("**/module-info.class");
mainClass = objects.property(String.class);
mainModule = objects.property(String.class);
@@ -257,6 +264,14 @@ public class EnvelopeJarTask extends AbstractArchiveTask {
zipEntry.setMethod(ZipEntry.DEFLATED);
zipOutputStream.putNextEntry(zipEntry);
javaAgents.store(zipOutputStream, null);
zipEntry = zipEntryFactory.createZipEntry(Constants.SYSTEM_PROPERTIES_FILE);
zipEntry.setMethod(ZipEntry.DEFLATED);
zipOutputStream.putNextEntry(zipEntry);
Properties props = new Properties();
for(Map.Entry<String, String> entry : systemProperties.entrySet()) {
props.setProperty(entry.getKey(), entry.getValue());
}
props.store(zipOutputStream, null);
while (true) {
zipEntry = zipInputStream.getNextEntry();

View File

@@ -7,7 +7,11 @@ import org.gradle.api.plugins.BasePlugin;
import org.gradle.api.plugins.BasePluginExtension;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.bundling.Jar;
import org.gradle.process.CommandLineArgumentProvider;
import java.util.Arrays;
public class EnvelopePlugin implements Plugin<Project> {
@Override
@@ -22,5 +26,11 @@ public class EnvelopePlugin implements Plugin<Project> {
project.getTasks().named(BasePlugin.ASSEMBLE_TASK_NAME, DefaultTask.class, assembleTask -> {
assembleTask.dependsOn(envelopeJarTaskProvider);
});
Provider<JavaExec> envelopeRunTaskProvider = project.getTasks().register("envelopeRun", JavaExec.class, t -> {
t.getInputs().files(envelopeJarTaskProvider);
t.setGroup("envelope");
t.setDescription("Run the application in the envelope jar");
t.classpath(envelopeJarTaskProvider);
});
}
}