From ce96104e50c76a9a65842265972362f0e6ba5d4b Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Thu, 10 May 2012 08:49:32 -0500 Subject: [PATCH 1/3] remove version from grails-wrapper.properties --- grails-wrapper/build.gradle | 4 ++-- .../main/java/org/grails/wrapper/GrailsWrapper.java | 7 ++++--- .../src/main/resources/grails-wrapper.properties | 1 - scripts/Wrapper.groovy | 11 +++-------- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/grails-wrapper/build.gradle b/grails-wrapper/build.gradle index 950065354b8..858c17bd851 100644 --- a/grails-wrapper/build.gradle +++ b/grails-wrapper/build.gradle @@ -11,10 +11,10 @@ task copyScript(type: Copy) { rename 'startGrails.bat', 'grailsw.bat' } filter(ReplaceTokens, tokens: ['starter.main.class': 'org.grails.wrapper.GrailsWrapper']) - filter(ReplaceTokens, tokens: ['starter.classpath': '@wrapperDir@/grails-wrapper-runtime-@grailsVersion@.jar:@wrapperDir@']) + filter(ReplaceTokens, tokens: ['starter.classpath': '@wrapperDir@/grails-wrapper-runtime-@grailsVersion@.jar:@wrapperDir@:.']) filter(ReplaceTokens, tokens: ['agent.string': '-javaagent:@wrapperDir@/springloaded-core-@springLoadedVersion@.jar -noverify -Dspringloaded=$SPRINGLOADED_PARAMS']) filter(ReplaceTokens, tokens: ['startup.command': 'startGrails $STARTER_MAIN_CLASS "$@"']) - filter(ReplaceTokens, tokens: ['windows.starter.classpath': '@wrapperDir@/grails-wrapper-runtime-@grailsVersion@.jar;@wrapperDir@']) + filter(ReplaceTokens, tokens: ['windows.starter.classpath': '@wrapperDir@/grails-wrapper-runtime-@grailsVersion@.jar;@wrapperDir@;.']) filter(ReplaceTokens, tokens: ['windows.agent.string': "-javaagent:@wrapperDir@/springloaded-core-@springLoadedVersion@.jar -noverify -Dspringloaded=%SPRINGLOADED_PARAMS%".toString()]) fileMode = 0755 } diff --git a/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java b/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java index 68ffd6bd745..7048b021044 100644 --- a/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java +++ b/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java @@ -22,12 +22,13 @@ public class GrailsWrapper { public static void main(final String[] args) throws Exception{ - ResourceBundle bundle = ResourceBundle.getBundle("grails-wrapper"); - final String grailsVersion = bundle.getString("wrapper.version"); + final ResourceBundle applicationBundle = ResourceBundle.getBundle("application"); + final ResourceBundle wrapperBundle = ResourceBundle.getBundle("grails-wrapper"); + final String grailsVersion = applicationBundle.getString("app.grails.version"); final File grailsCacheDir = new File(System.getProperty("user.home") + "/.grails/"); final File grailsVersionDir = new File(grailsCacheDir, grailsVersion); final File wrapperDir = new File(grailsVersionDir, "wrapper"); - String distUrl = bundle.getString("wrapper.dist.url"); + String distUrl = wrapperBundle.getString("wrapper.dist.url"); if(distUrl == null) { distUrl = "http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/"; } diff --git a/grails-wrapper/src/main/resources/grails-wrapper.properties b/grails-wrapper/src/main/resources/grails-wrapper.properties index 753959e472d..6bade397b66 100644 --- a/grails-wrapper/src/main/resources/grails-wrapper.properties +++ b/grails-wrapper/src/main/resources/grails-wrapper.properties @@ -1,2 +1 @@ -wrapper.version=@wrapperVersion@ wrapper.dist.url=@distributationUrl@ diff --git a/scripts/Wrapper.groovy b/scripts/Wrapper.groovy index 61694cb2b8a..1a463e1ed5b 100644 --- a/scripts/Wrapper.groovy +++ b/scripts/Wrapper.groovy @@ -1,20 +1,17 @@ includeTargets << grailsScript("_GrailsInit") USAGE = """ - wrapper [--wrapperVersion=version] [--wrapperDir=dir] [--distributionUrl=url] + wrapper [--wrapperDir=dir] [--distributionUrl=url] where - --wrapperVersion = The version of Grails that the wrapper should use --wrapperDir = Directory where wrapper support files are installed relative to project root --distributationUrl = URL to the directory where the release may be downloaded from if necessary examples - grails wrapper --wrapperVersion=2.0.3 - grails wrapper --wrapperDir=grailsWrapper --wrapperVersion=2.0.3 - grails wrapper --wrapperVersion=2.0.0.RC1 --distributionUrl=http://dist.springframework.org.s3.amazonaws.com/milestone/GRAILS/ + grails wrapper --wrapperDir=grailsWrapper + grails wrapper --wrapperDir=grailsWrapper --distributionUrl=http://dist.springframework.org.s3.amazonaws.com/milestone/GRAILS/ optional argument default values - wrapperVersion = the version of Grails that the wrapper is being generated with ($grailsVersion) wrapperDir = 'wrapper' distributionUrl = 'http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/' @@ -24,7 +21,6 @@ target ('default': "Installs the Grails wrapper") { depends(checkVersion, parseArguments) event 'InstallWrapperStart', [ 'Installing Wrapper...' ] - grailsWrapperVersion = argsMap.wrapperVersion ?: grailsVersion grailsDistUrl = argsMap.distributionUrl ?: 'http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/' grailsWrapperDir = argsMap.wrapperDir ?: 'wrapper' @@ -53,7 +49,6 @@ target ('default': "Installs the Grails wrapper") { include(name: 'grailsw*') } } - ant.replace(dir: targetDir, includes: '*.properties', token: '@wrapperVersion@', value: grailsWrapperVersion) ant.replace(dir: targetDir, includes: '*.properties', token: '@distributationUrl@', value: grailsDistUrl) ant.replace(dir: basedir, includes: 'grailsw*', token: '@wrapperDir@', value: grailsWrapperDir) ant.chmod(file: 'grailsw', perm: 'u+x') From fcc6ee4bf977618be9f4e6062a58bd80b885d415 Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Thu, 10 May 2012 09:11:33 -0500 Subject: [PATCH 2/3] refactor wrapper setup code --- .../org/grails/wrapper/GrailsWrapper.java | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java b/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java index 7048b021044..91b5e2ffdde 100644 --- a/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java +++ b/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java @@ -25,9 +25,6 @@ public static void main(final String[] args) throws Exception{ final ResourceBundle applicationBundle = ResourceBundle.getBundle("application"); final ResourceBundle wrapperBundle = ResourceBundle.getBundle("grails-wrapper"); final String grailsVersion = applicationBundle.getString("app.grails.version"); - final File grailsCacheDir = new File(System.getProperty("user.home") + "/.grails/"); - final File grailsVersionDir = new File(grailsCacheDir, grailsVersion); - final File wrapperDir = new File(grailsVersionDir, "wrapper"); String distUrl = wrapperBundle.getString("wrapper.dist.url"); if(distUrl == null) { distUrl = "http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/"; @@ -35,16 +32,8 @@ public static void main(final String[] args) throws Exception{ if(!distUrl.endsWith("/")) { distUrl += "/"; } - final String src = distUrl + "grails-" + grailsVersion + ".zip"; - final URI uri = new URI(src); - - final File file = new File(wrapperDir, "download.zip"); - new RemoteFileHelper().retrieve(uri, file); - final File installDir = new File(wrapperDir, "install"); - if(!installDir.exists()) { - extract(file, installDir); - } - final File grailsHome = new File(installDir, "grails-" + grailsVersion); + + final File grailsHome = configureGrailsInstallation(distUrl, grailsVersion); System.setProperty("grails.home", grailsHome.getAbsolutePath()); @@ -79,6 +68,29 @@ public boolean accept(final File dir, final String name) { mainMethod.invoke(null, new Object[]{newArgsArray}); } + + /** + * + * @param distUrl URL to directory where distribution zip is found + * @param grailsVersion version of Grails to configure + * @return a File pointing to the directory where this version of Grails is configured + */ + private static File configureGrailsInstallation(String distUrl, + final String grailsVersion) throws Exception { + final String src = distUrl + "grails-" + grailsVersion + ".zip"; + final URI uri = new URI(src); + + final File grailsCacheDir = new File(System.getProperty("user.home") + "/.grails/"); + final File wrapperDir = new File(grailsCacheDir, "wrapper"); + final File downloadFile = new File(wrapperDir, "grails-" + grailsVersion + "-download.zip"); + new RemoteFileHelper().retrieve(uri, downloadFile); + final File installDir = new File(wrapperDir, grailsVersion); + if(!installDir.exists()) { + extract(downloadFile, installDir); + } + final File grailsHome = new File(installDir, "grails-" + grailsVersion); + return grailsHome; + } public static void extract(final File zip, final File dest) throws IOException { System.out.println("Extracting " + zip.getAbsolutePath() + " to " + dest.getAbsolutePath()); From 31d04e2d72208fc3421dc2c2152f64633ac22670 Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Thu, 10 May 2012 09:31:55 -0500 Subject: [PATCH 3/3] improve wrapper's groovy-all jar locating code --- .../org/grails/wrapper/GrailsWrapper.java | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java b/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java index 91b5e2ffdde..e8729b6445a 100644 --- a/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java +++ b/grails-wrapper/src/main/java/org/grails/wrapper/GrailsWrapper.java @@ -56,12 +56,15 @@ public static void main(final String[] args) throws Exception{ final String[] newArgsArray = newArgsList.toArray(new String[0]); final URL[] urls = new URL[2]; urls[0] = new File(grailsHome, "dist/grails-bootstrap-" + grailsVersion + ".jar").toURI().toURL(); - File[] groovyJarCandidates = new File(grailsHome, "lib/org.codehaus.groovy/groovy-all/jars/").listFiles(new FilenameFilter() { - public boolean accept(final File dir, final String name) { - return name.startsWith("groovy-all-") && name.endsWith(".jar"); - } - }); - urls[1] = groovyJarCandidates[0].toURI().toURL(); + final File directoryToSearchForGroovyAllJar = new File(grailsHome, "/lib/org.codehaus.groovy"); + final File groovyJar = findGroovyAllJar(directoryToSearchForGroovyAllJar); + if(groovyJar == null) { + System.err.println("An error occurred locating the groovy jar under " + directoryToSearchForGroovyAllJar.getAbsolutePath()); + System.exit(-1); + } + final URI groovyJarUri = groovyJar.toURI(); + final URL groovyJarUrl = groovyJarUri.toURL(); + urls[1] = groovyJarUrl; final URLClassLoader urlClassLoader = new URLClassLoader(urls); final Class loadClass = urlClassLoader.loadClass("org.codehaus.groovy.grails.cli.support.GrailsStarter"); final Method mainMethod = loadClass.getMethod("main", String[].class); @@ -69,9 +72,23 @@ public boolean accept(final File dir, final String name) { mainMethod.invoke(null, new Object[]{newArgsArray}); } + private static File findGroovyAllJar(final File directoryToSearch) { + final File[] files = directoryToSearch.listFiles(); + for(File file : files) { + if(file.isDirectory()) { + return findGroovyAllJar(file); + } + final String fileName = file.getName(); + if(fileName.startsWith("groovy-all-") && fileName.endsWith(".jar")) { + return file; + } + } + return null; + } + /** * - * @param distUrl URL to directory where distribution zip is found + * @param distUrl URL to directory where the distribution zip is found * @param grailsVersion version of Grails to configure * @return a File pointing to the directory where this version of Grails is configured */