cleanup (inspection "Java | Class structure | Utility class is not 'final'")
[idea/community.git] / jps / jps-launcher / src / org / jetbrains / jps / cmdline / Launcher.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package org.jetbrains.jps.cmdline;
3
4 import java.io.File;
5 import java.lang.reflect.InvocationTargetException;
6 import java.lang.reflect.Method;
7 import java.net.MalformedURLException;
8 import java.net.URL;
9 import java.net.URLClassLoader;
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.Random;
13 import java.util.StringTokenizer;
14
15 /**
16  * @author Eugene Zhuravlev
17  */
18 public final class Launcher {
19   public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
20     final String jpsClasspath = args[0];
21     final String mainClassName = args[1];
22     final String[] jpsArgs = new String[args.length - 2];
23     System.arraycopy(args, 2, jpsArgs, 0, jpsArgs.length);
24
25     final StringTokenizer tokenizer = new StringTokenizer(jpsClasspath, File.pathSeparator, false);
26     final List<URL> urls = new ArrayList<>();
27     while (tokenizer.hasMoreTokens()) {
28       final String path = tokenizer.nextToken();
29       urls.add(new File(path).toURI().toURL());
30     }
31     final URLClassLoader jpsLoader = new URLClassLoader(urls.toArray(new URL[0]), Launcher.class.getClassLoader());
32
33     // IDEA-120811; speeding up DefaultChannelIDd calculation for netty
34     //if (Boolean.parseBoolean(System.getProperty("io.netty.random.id"))) {
35       System.setProperty("io.netty.machineId", "28:f0:76:ff:fe:16:65:0e");
36       System.setProperty("io.netty.processId", Integer.toString(new Random().nextInt(65535)));
37       System.setProperty("io.netty.serviceThreadPrefix", "Netty");
38     //}
39
40     final Class<?> mainClass = jpsLoader.loadClass(mainClassName);
41     final Method mainMethod = mainClass.getMethod("main", String[].class);
42     Thread.currentThread().setContextClassLoader(jpsLoader);
43     mainMethod.invoke(null, new Object[] {jpsArgs});
44   }
45 }