001
014
015 package com.liferay.portal.util;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.util.Http;
020 import com.liferay.portal.kernel.util.PortalRunMode;
021 import com.liferay.portal.kernel.util.ReflectionUtil;
022 import com.liferay.portal.kernel.util.StringUtil;
023
024 import java.io.InputStream;
025
026 import java.lang.reflect.Method;
027
028 import java.net.InetAddress;
029 import java.net.URI;
030 import java.net.URL;
031 import java.net.URLClassLoader;
032 import java.net.UnknownHostException;
033
034 import java.nio.file.Files;
035 import java.nio.file.Path;
036 import java.nio.file.Paths;
037 import java.nio.file.StandardCopyOption;
038
039
042 public class JarUtil {
043
044 public static void downloadAndInstallJar(
045 URL url, String libPath, String name, URLClassLoader urlClassLoader)
046 throws Exception {
047
048 String protocol = url.getProtocol();
049
050 if (PortalRunMode.isTestMode() &&
051 (protocol.equals(Http.HTTP) || protocol.equals(Http.HTTPS))) {
052
053 try {
054 InetAddress.getAllByName("mirrors");
055
056 String urlString = url.toExternalForm();
057
058 String newURLString = StringUtil.replace(
059 urlString, ":
060
061 url = new URL(newURLString);
062
063 if (_log.isDebugEnabled()) {
064 _log.debug(
065 "Swapping URL from " + urlString + " to " +
066 newURLString);
067 }
068 }
069 catch (UnknownHostException uhe) {
070 if (_log.isDebugEnabled()) {
071 _log.debug("Unable to resolve \"mirrors\"");
072 }
073 }
074 }
075
076 Path path = Paths.get(libPath, name);
077
078 if (_log.isInfoEnabled()) {
079 _log.info("Downloading " + url + " to " + path);
080 }
081
082 try (InputStream inputStream = url.openStream()) {
083 Files.copy(inputStream, path, StandardCopyOption.REPLACE_EXISTING);
084 }
085
086 if (_log.isInfoEnabled()) {
087 _log.info("Downloaded " + url + " to " + path);
088 }
089
090 URI uri = path.toUri();
091
092 if (_log.isInfoEnabled()) {
093 _log.info("Installing " + path + " to " + urlClassLoader);
094 }
095
096 _addURLMethod.invoke(urlClassLoader, uri.toURL());
097
098 if (_log.isInfoEnabled()) {
099 _log.info("Installed " + path + " to " + urlClassLoader);
100 }
101 }
102
103 private static final Log _log = LogFactoryUtil.getLog(JarUtil.class);
104
105 private static final Method _addURLMethod;
106
107 static {
108 try {
109 _addURLMethod = ReflectionUtil.getDeclaredMethod(
110 URLClassLoader.class, "addURL", URL.class);
111 }
112 catch (Exception e) {
113 throw new ExceptionInInitializerError(e);
114 }
115 }
116
117 }