Skip to content

Commit 82a651a

Browse files
committed
Improvements to Grails Wrapper JAR
* Fixes #7 * Update Grails Artifactory URL to HTTPS * Flexibility to override Grails Artifactory base URL via SystemProperty or Environment variable.
1 parent 8550997 commit 82a651a

File tree

1 file changed

+44
-18
lines changed

1 file changed

+44
-18
lines changed

starter/src/main/java/grails/init/Start.java

Lines changed: 44 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
import java.io.FileInputStream;
1111
import java.io.FileOutputStream;
1212
import java.io.IOException;
13+
import java.io.InputStream;
1314
import java.lang.reflect.Method;
1415
import java.net.Authenticator;
16+
import java.net.HttpURLConnection;
1517
import java.net.URL;
1618
import java.net.URLClassLoader;
1719
import java.nio.channels.Channels;
@@ -24,17 +26,31 @@
2426
public class Start {
2527

2628
private static final String PROJECT_NAME = "grails-wrapper";
27-
private static final String BASE_URL = "http://repo.grails.org/grails/core/org/grails/" + PROJECT_NAME;
29+
private static final String WRAPPER_PATH = "/org/grails/" + PROJECT_NAME;
30+
private static final String DEFAULT_GRAILS_CORE_ARTIFACTORY_BASE_URL = "https://repo.grails.org/grails/core";
2831
private static final File WRAPPER_DIR = new File(System.getProperty("user.home") + "/.grails/wrapper");
2932
private static final File NO_VERSION_JAR = new File(WRAPPER_DIR, PROJECT_NAME + ".jar");
3033

31-
private static String getVersion() throws SAXException, ParserConfigurationException {
34+
private static String getGrailsCoreArtifactoryBaseUrl() {
35+
String baseUrl = System.getProperty("grails.core.artifactory.baseUrl");
36+
if (baseUrl != null) {
37+
return baseUrl;
38+
}
39+
baseUrl = System.getenv("GRAILS_CORE_ARTIFACTORY_BASE_URL");
40+
if (baseUrl != null) {
41+
return baseUrl;
42+
}
43+
return DEFAULT_GRAILS_CORE_ARTIFACTORY_BASE_URL;
44+
}
45+
46+
private static String getVersion() {
3247
try {
3348
SAXParserFactory factory = SAXParserFactory.newInstance();
3449
SAXParser saxParser = factory.newSAXParser();
3550
FindReleaseHandler findReleaseHandler = new FindReleaseHandler();
36-
saxParser.parse(new URL(BASE_URL + "/maven-metadata.xml").openStream(), findReleaseHandler);
37-
51+
final String mavenMetadataFileUrl = getGrailsCoreArtifactoryBaseUrl() + WRAPPER_PATH + "/maven-metadata.xml";
52+
HttpURLConnection conn = createHttpURLConnection(mavenMetadataFileUrl);
53+
saxParser.parse(conn.getInputStream(), findReleaseHandler);
3854
return findReleaseHandler.getVersion();
3955
} catch (Exception e) {
4056
if (!NO_VERSION_JAR.exists()) {
@@ -46,6 +62,13 @@ private static String getVersion() throws SAXException, ParserConfigurationExcep
4662
}
4763
}
4864

65+
private static HttpURLConnection createHttpURLConnection(String mavenMetadataFileUrl) throws IOException {
66+
final URL url = new URL(mavenMetadataFileUrl);
67+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
68+
conn.setInstanceFollowRedirects(true);
69+
return conn;
70+
}
71+
4972

5073
private static boolean updateJar(String version) {
5174

@@ -57,25 +80,28 @@ private static boolean updateJar(String version) {
5780
WRAPPER_DIR.mkdirs();
5881

5982
try {
60-
File dowloadedJar = File.createTempFile(jarFileName, jarFileExtension);
61-
62-
URL website = new URL(BASE_URL + "/" + version + "/" + jarFileName + jarFileExtension);
63-
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
64-
FileOutputStream fos = new FileOutputStream(dowloadedJar);
65-
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
66-
fos.close();
67-
68-
Files.move(dowloadedJar.getAbsoluteFile().toPath(), NO_VERSION_JAR.getAbsoluteFile().toPath(), REPLACE_EXISTING);
83+
File downloadedJar = File.createTempFile(jarFileName, jarFileExtension);
6984

70-
success = true;
71-
} catch(Exception e) {
85+
final String wrapperUrl = getGrailsCoreArtifactoryBaseUrl() + WRAPPER_PATH + "/" + version + "/" + jarFileName + jarFileExtension;
86+
HttpURLConnection conn = createHttpURLConnection(wrapperUrl);
87+
success = downloadWrapperJar(downloadedJar, conn.getInputStream());
88+
} catch (Exception e) {
7289
System.out.println("There was an error downloading the wrapper jar");
7390
e.printStackTrace();
7491
}
7592

7693
return success;
7794
}
7895

96+
private static boolean downloadWrapperJar(File downloadedJar, InputStream inputStream) throws IOException {
97+
ReadableByteChannel rbc = Channels.newChannel(inputStream);
98+
try (FileOutputStream fos = new FileOutputStream(downloadedJar)) {
99+
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
100+
}
101+
Files.move(downloadedJar.getAbsoluteFile().toPath(), NO_VERSION_JAR.getAbsoluteFile().toPath(), REPLACE_EXISTING);
102+
return true;
103+
}
104+
79105
public static void main(String[] args) {
80106
Authenticator.setDefault(new SystemPropertiesAuthenticator());
81107

@@ -115,16 +141,16 @@ public static void main(String[] args) {
115141
if (outputStream != null) {
116142
outputStream.close();
117143
}
118-
}
144+
}
119145
}
120146
}
121147
}
122148
}
123149

124-
URLClassLoader child = new URLClassLoader(new URL[] {NO_VERSION_JAR.toURI().toURL()});
150+
URLClassLoader child = new URLClassLoader(new URL[]{NO_VERSION_JAR.toURI().toURL()});
125151
Class classToLoad = Class.forName("grails.init.RunCommand", true, child);
126152
Method main = classToLoad.getMethod("main", String[].class);
127-
main.invoke(null, (Object)args);
153+
main.invoke(null, (Object) args);
128154

129155
} catch (Exception e) {
130156
e.printStackTrace();

0 commit comments

Comments
 (0)