added system properties support
This commit is contained in:
@@ -13,6 +13,7 @@ public class Constants {
|
||||
public static final String DEFAULT_LAUNCHER = "net.woggioni.envelope.Launcher";
|
||||
public static final String AGENT_LAUNCHER = "net.woggioni.envelope.JavaAgentLauncher";
|
||||
public static final String JAVA_AGENTS_FILE = METADATA_FOLDER + "/javaAgents.properties";
|
||||
public static final String SYSTEM_PROPERTIES_FILE = METADATA_FOLDER + "/system.properties";
|
||||
|
||||
public static class ManifestAttributes {
|
||||
public static final String MAIN_MODULE = "Executable-Jar-Main-Module";
|
||||
|
@@ -1,9 +1,9 @@
|
||||
woggioniMavenRepositoryUrl=https://woggioni.net/mvn/
|
||||
publishMavenRepositoryUrl=https://mvn.woggioni.net/
|
||||
|
||||
version.envelope=0.1
|
||||
version.envelope=1.0-SNAPSHOT
|
||||
version.gradle=7.4
|
||||
version.lombok=1.18.22
|
||||
version.xclassloader=1.0
|
||||
version.xclassloader=1.0-SNAPSHOT
|
||||
version.junitJupiter=5.7.2
|
||||
version.junitPlatform=1.7.0
|
||||
version.junitPlatform=1.7.0
|
||||
|
@@ -1,7 +1,6 @@
|
||||
package net.woggioni.envelope;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.java.Log;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Method;
|
||||
@@ -16,7 +15,9 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Properties;
|
||||
import java.util.function.Function;
|
||||
import java.util.jar.Attributes;
|
||||
import java.util.jar.JarFile;
|
||||
@@ -26,7 +27,6 @@ import java.util.stream.Stream;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
|
||||
@Log
|
||||
public class Launcher {
|
||||
|
||||
@SneakyThrows
|
||||
@@ -41,6 +41,19 @@ public class Launcher {
|
||||
|
||||
@SneakyThrows
|
||||
public static void main(String[] args) {
|
||||
Enumeration<URL> it = Launcher.class.getClassLoader().getResources(Constants.SYSTEM_PROPERTIES_FILE);
|
||||
while (it.hasMoreElements()) {
|
||||
URL url = it.nextElement();
|
||||
Properties properties = new Properties();
|
||||
try (InputStream is = url.openStream()) {
|
||||
properties.load(is);
|
||||
}
|
||||
for (Map.Entry<Object, Object> entry : properties.entrySet()) {
|
||||
String key = (String) entry.getKey();
|
||||
String value = (String) entry.getValue();
|
||||
if(System.getProperty(key) == null) System.setProperty(key, value);
|
||||
}
|
||||
}
|
||||
URI currentJar = findCurrentJar();
|
||||
String currentJarPath = currentJar.getPath();
|
||||
URL manifestResource = null;
|
||||
|
@@ -1,6 +1,12 @@
|
||||
pluginManagement {
|
||||
repositories {
|
||||
maven {
|
||||
content {
|
||||
includeModule 'net.woggioni.gradle', 'lombok'
|
||||
includeModule 'net.woggioni.gradle.lombok', 'net.woggioni.gradle.lombok.gradle.plugin'
|
||||
includeModule 'net.woggioni.gradle', 'multi-release-jar'
|
||||
includeModule 'net.woggioni.gradle.multi-release-jar', 'net.woggioni.gradle.multi-release-jar.gradle.plugin'
|
||||
}
|
||||
url = 'https://woggioni.net/mvn/'
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user