What do you think of my run jar anywhere in the
world ?
/* * runjar.java * *
Created on 22 February 2003, 16:12 */
package runajar;
/** * * @author Zahid
Rahman
Copyright - All rights
reserved */
import java.net.*; import
java.io.*;
/** * <p>Title: run a jar
<u>from</u> anywhere in the world</p> *
<p>Description: java -jar runajar.jar <url or path of the jar to
run>
<arguments> *
or: runajar <url or path of the jar to run>
<arguments></p> * <p>Company:
objectworlds</p> * @author zahid * @version
1.0 * */
public class Runajar {
static final int BLOCK_SIZE = 65500; //
bytes static byte[] buf = new byte[BLOCK_SIZE]; static final
int SLEEP_UNIT = 333; // msec static final String TMP_DIR
= "/tmp/runjar";
public static void main(String[] args)
{ try { if (args.length
> 0) { String urlstring =
args[0]; // jar url string File
here = new File("."); File
localcopy = new File(urlstring);
if
(!localcopy.exists())
{ URL url = ""
URL(urlstring); String
filename = urlstring.substring(urlstring.lastIndexOf('/') + 1); // jar
name File root = new
File(here.getAbsolutePath()); // is not it
something? while
(root.getParent() != null && root.getParent() !=
root.getCanonicalPath())
{ root =
new File(root.getParent()); // that's the way to find the
root
} File tmpdir = new
File(root, TMP_DIR);
if (!tmpdir.exists()) tmpdir.mkdirs();
localcopy = new
File(tmpdir, filename); // local copy of the
jar InputStream is =
new
BufferedInputStream(url.openStream());
OutputStream os = new BufferedOutputStream(new
FileOutputStream(localcopy));
pipe(is, os, true);
os.close();
is.close();
} String javaexec =
System.getProperty("java.home") + File.separator
+
"bin" + File.separator
+
"java"; String cmd =
javaexec + " -jar " + localcopy.getAbsolutePath();
for (int
i = 1; i < args.length; i++)
{ cmd += """ + args[i]
+ """;
} Process process =
Runtime.getRuntime().exec(cmd, null,
here); int result =
0;
for
(boolean isRunning = true; isRunning;)
{
Thread.sleep(SLEEP_UNIT);
try {
result =
process.exitValue();
isRunning = false; }
catch (IllegalThreadStateException ie) {}
try
{
pipe(System.in, process.getOutputStream(),
false);
pipe(process.getErrorStream(), System.err,
false);
pipe(process.getInputStream(), System.out,
false); }
catch(Exception e) {}
}
System.exit(result); } }
catch (Exception e) {
System.err.println(e); } }
static void pipe(InputStream in,
OutputStream out, boolean isBlocking) throws IOException {
int nread; int navailable; int total
= 0; synchronized (in) {
while((navailable = isBlocking ? Integer.MAX_VALUE : in.available()) > 0
&&
(nread = in.read(buf, 0, Math.min(buf.length, navailable))) >= 0)
{ out.write(buf, 0,
nread); total +=
nread; }
} out.flush(); } }
running instructions
Regards,
Zahid Rahman
|