package aQute.launcher.pre; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.lang.reflect.Method; import java.net.URL; import java.nio.file.Files; import aQute.lib.io.IOConstants; public class JpmLauncher { static final int BUFFER_SIZE = IOConstants.PAGE_SIZE * 16; public static void main(String args[]) throws Exception { // if (args.length == 1 && args[0].equals("--jpminstall")) { // System.err.println("does not work yet"); // installjpm(); // } try { Class< ? > cl = JpmLauncher.class.getClassLoader().loadClass("aQute.launcher.Launcher"); Method m = cl.getMethod("main", new Class< ? >[] { String[].class }); m.invoke(null, new Object[] { args }); return; } catch (ClassNotFoundException e) {} catch (NoSuchMethodException eee) {} catch (Exception ee) { throw ee; } System.err.println("This jar requires installation by jpm, invoke this command with the option --jpminstall.\n" + "This will install jpm and then then use jpm to install this jar. You can read more about jpm4j\n" + "on https://www.jpm4j.org"); } static void installjpm() throws IOException { Process exec = Runtime.getRuntime().exec("jpm version"); String version = collect(exec.getInputStream()); if (exec.exitValue() == -1) { System.out.println("No jpm installed, installing jpm (requires sudo)"); File tmpjpm = File.createTempFile("jpm", ".jar"); URL url = new URL("https://github.com/jpm4j/jpm4j.installers/raw/master/dist/biz.aQute.jpm.run.jar "); copy(url.openStream(), tmpjpm); Runtime.getRuntime().exec("java -jar " + tmpjpm.getAbsolutePath() + " init"); } else { System.out.println("detected jpm version " + version); } } private static String collect(InputStream inputStream) throws IOException { try { StringBuilder sb = new StringBuilder(); InputStreamReader rdr = new InputStreamReader(inputStream); int c; while ((c = rdr.read()) >= 0) sb.append((char) c); return sb.toString(); } finally { inputStream.close(); } } private static void copy(InputStream in, File tmpjpm) throws IOException { try (OutputStream out = Files.newOutputStream(tmpjpm.toPath())) { byte[] buffer = new byte[BUFFER_SIZE]; for (int size; (size = in.read(buffer, 0, buffer.length)) > 0;) { out.write(buffer, 0, size); } } finally { in.close(); } } }