summaryrefslogtreecommitdiff
path: root/clientserver/src
diff options
context:
space:
mode:
authorRobby <robby@santoslab.org>2018-03-13 11:41:43 -0500
committerNikolay Tatarinov <5min4eq.unity@gmail.com>2018-03-13 19:41:43 +0300
commita9d4eea6f5b81cdbef84724e612bf07954e2673c (patch)
tree8d9219a5c9f8e5153e71c21e797a4cb1ff32e733 /clientserver/src
parentac7eedc2cc858a778a63a7e03ccd03bac2676871 (diff)
downloadmill-a9d4eea6f5b81cdbef84724e612bf07954e2673c.tar.gz
mill-a9d4eea6f5b81cdbef84724e612bf07954e2673c.tar.bz2
mill-a9d4eea6f5b81cdbef84724e612bf07954e2673c.zip
Fixes for non-interactive (client/server) mode on Java 9 (#221)
* Fixes for client/server mode on Java 9. * Upgraded ammonite to 1.0.5-4-c0cdbaf.
Diffstat (limited to 'clientserver/src')
-rw-r--r--clientserver/src/mill/clientserver/Client.java19
1 files changed, 14 insertions, 5 deletions
diff --git a/clientserver/src/mill/clientserver/Client.java b/clientserver/src/mill/clientserver/Client.java
index 1870c8a4..ed2fe6ad 100644
--- a/clientserver/src/mill/clientserver/Client.java
+++ b/clientserver/src/mill/clientserver/Client.java
@@ -1,29 +1,38 @@
package mill.clientserver;
+import io.github.retronym.java9rtexport.Export;
import org.scalasbt.ipcsocket.UnixDomainSocket;
import java.io.*;
import java.net.URL;
import java.nio.channels.FileChannel;
+import java.nio.file.Files;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.Properties;
public class Client {
static void initServer(String lockBase) throws IOException{
- StringBuilder selfJars = new java.lang.StringBuilder();
+ ArrayList<String> selfJars = new ArrayList<String>();
ClassLoader current = Client.class.getClassLoader();
while(current != null){
if (current instanceof java.net.URLClassLoader) {
URL[] urls = ((java.net.URLClassLoader) current).getURLs();
for (URL url: urls) {
- if (selfJars.length() != 0) selfJars.append(':');
- selfJars.append(url);
+ selfJars.add(url.toString());
}
}
current = current.getParent();
}
-
+ if (!System.getProperty("java.specification.version").startsWith("1.")) {
+ selfJars.addAll(Arrays.asList(System.getProperty("java.class.path").split(File.pathSeparator)));
+ File rtFile = new File(lockBase + "/rt-" + System.getProperty("java.version") + ".jar");
+ if (!rtFile.exists()) {
+ Files.copy(Export.export().toPath(), rtFile.toPath());
+ }
+ selfJars.add(rtFile.getCanonicalPath());
+ }
ArrayList<String> l = new java.util.ArrayList<String>();
l.add("java");
Properties props = System.getProperties();
@@ -33,7 +42,7 @@ public class Client {
if (k.startsWith("MILL_")) l.add("-D" + k + "=" + props.getProperty(k));
}
l.add("-cp");
- l.add(selfJars.toString());
+ l.add(String.join(File.pathSeparator, selfJars));
l.add("mill.ServerMain");
l.add(lockBase);
new java.lang.ProcessBuilder()