This is an automated email from the ASF dual-hosted git repository. jdaugherty pushed a commit to branch wrapper-rewrite in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit b26cb4fafd8aa7a6149801e143f6f334d4c09584 Author: James Daugherty <jdaughe...@jdresources.net> AuthorDate: Wed May 14 00:10:35 2025 -0400 Remove old GRAILS_HOME related code --- CONTRIBUTING.md | 20 -------- README.md | 21 +++++++-- .../cfg/GroovyConfigPropertySourceLoader.groovy | 27 +++++------ .../plugins/AbstractGrailsPluginManager.java | 28 +++++------- .../GroovyConfigPropertySourceLoaderSpec.groovy | 28 ++++++------ .../src/test/resources/builtin-config.groovy | 18 +++++++- grails-doc/src/en/guide/conf/config.adoc | 1 - grails-doc/src/en/guide/contributing/build.adoc | 53 +++++++--------------- .../gettingStarted/downloadingAndInstalling.adoc | 8 ++-- grails-doc/src/en/ref/Command Line.adoc | 1 - .../main/groovy/grails/util/BuildSettings.groovy | 6 --- .../src/main/groovy/grails/util/Environment.groovy | 30 +++++------- grails-shell-cli/build.gradle | 4 +- 13 files changed, 105 insertions(+), 140 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c7f50a5755..7c09e406cc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -152,26 +152,6 @@ This will create a `grails-core` directory in your current working directory con sdk env . -##### 3. Grails Home Setup - -If you look at the project structure, you'll see that it does not look like a standard `GRAILS_HOME` installation. But, it's very simple to turn it into one. Just run this from the root directory of the project: - - ./gradlew install - -This will fetch all the standard dependencies required by Grails and then build a `GRAILS_HOME` installation. Note that this target skips the extensive collection of Grails test classes, which can take some time to complete. - -Once the above command has finished, simply set the `GRAILS_HOME` environment variable to the checkout directory and add the "bin" directory to your path. When you next type `grails` command to run, you'll be using the version you just built. - -If you are using http://sdkman.io[SDKMAN] then that can also be used to work with this local installation via the following: - - sdk install grails dev /path/to/grails-core - -You will also need to publish your local installation to your local maven. - - ./gradlew publishToMavenLocal - -Now you will have a dev version in your local which you can use to test your features. - <!-- omit in toc --> #### Testing Your Change Grails has both local test coverage in the form of `unit` and `integration` tests. diff --git a/README.md b/README.md index 676444d507..f2cdd737fe 100644 --- a/README.md +++ b/README.md @@ -32,22 +32,33 @@ Ask questions on [Stack Overflow](https://stackoverflow.com/questions/tagged/gra You need a Java Development Kit (JDK) installed, but it is not necessary to install Groovy because it's bundled with the Grails distribution. -To install Grails, visit https://grails.org/download.html and download the version you would like to use. Set a `GRAILS_HOME` environment variable to point to the root of the extracted download and add `GRAILS_HOME/bin` to your executable `PATH`. Then in a shell, type the following: +It's recommended to use the [SDKMAN!](https://sdkman.io/) tool to install & manage multiple Grails version. +Alternatively, visit https://grails.org/download.html for other install options. If downloading the binary, the only +requirement is it be added to your path. + +To create your first Grails Application, you can use [Grails Forge](https://start.grails.org) or you can use the command +line. For legacy reasons, there exists 2 ways to generate Grails applications. `Grails Forge` and `Grails Shell`. The +grails binary allows you to use either to generate an app. + +For example purposes, using the legacy shell: grails create-app sampleapp cd sampleapp - grails run-app + ./gradlew bootRun -To build Grails, clone this GitHub repository and execute the install Gradle target: +To build Grails, clone this GitHub repository and execute the build Gradle target: git clone https://github.com/apache/grails-core.git cd grails-core - ./gradlew install + ./gradlew build -PskipTests -If you encounter out of memory errors when trying to run the install target, try adjusting Gradle build settings. For example: +If you encounter out of memory errors when trying to run the build, try adjusting Gradle build settings. For example: export GRADLE_OPTS="-Xmx2G -Xms2G -XX:NewSize=512m -XX:MaxNewSize=512m" +Please note that a valid container runtime is required to run Grails Tests. The example above omits the tests so the +build will pass. + ## Performing a Release See [RELEASE.md](RELEASE.md). diff --git a/grails-core/src/main/groovy/org/grails/core/cfg/GroovyConfigPropertySourceLoader.groovy b/grails-core/src/main/groovy/org/grails/core/cfg/GroovyConfigPropertySourceLoader.groovy index f48d2cce0d..6cdace651b 100644 --- a/grails-core/src/main/groovy/org/grails/core/cfg/GroovyConfigPropertySourceLoader.groovy +++ b/grails-core/src/main/groovy/org/grails/core/cfg/GroovyConfigPropertySourceLoader.groovy @@ -1,20 +1,18 @@ /* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * https://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.grails.core.cfg @@ -56,7 +54,6 @@ class GroovyConfigPropertySourceLoader implements PropertySourceLoader { ConfigSlurper configSlurper = env ? new ConfigSlurper(env) : new ConfigSlurper() configSlurper.setBinding(userHome: System.getProperty('user.home'), - grailsHome: BuildSettings.GRAILS_HOME?.absolutePath, appName: Metadata.getCurrent().getApplicationName(), appVersion: Metadata.getCurrent().getApplicationVersion() ) try { diff --git a/grails-core/src/main/groovy/org/grails/plugins/AbstractGrailsPluginManager.java b/grails-core/src/main/groovy/org/grails/plugins/AbstractGrailsPluginManager.java index cd54128bac..3593d9e226 100644 --- a/grails-core/src/main/groovy/org/grails/plugins/AbstractGrailsPluginManager.java +++ b/grails-core/src/main/groovy/org/grails/plugins/AbstractGrailsPluginManager.java @@ -1,20 +1,18 @@ /* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * https://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.grails.plugins; @@ -91,7 +89,6 @@ public abstract class AbstractGrailsPluginManager implements GrailsPluginManager protected boolean loadCorePlugins = true; private static final String CONFIG_BINDING_USER_HOME = "userHome"; - private static final String CONFIG_BINDING_GRAILS_HOME = "grailsHome"; private static final String CONFIG_BINDING_APP_NAME = "appName"; private static final String CONFIG_BINDING_APP_VERSION = "appVersion"; @@ -493,7 +490,6 @@ public abstract class AbstractGrailsPluginManager implements GrailsPluginManager final Map<String, Object> binding = new HashMap<>(); // configure config slurper binding binding.put(CONFIG_BINDING_USER_HOME, System.getProperty("user.home")); - binding.put(CONFIG_BINDING_GRAILS_HOME, System.getProperty("grails.home")); if (application != null) { binding.put(CONFIG_BINDING_APP_NAME, application.getMetadata().getApplicationName()); binding.put(CONFIG_BINDING_APP_VERSION, application.getMetadata().getApplicationVersion()); diff --git a/grails-core/src/test/groovy/org/grails/core/cfg/GroovyConfigPropertySourceLoaderSpec.groovy b/grails-core/src/test/groovy/org/grails/core/cfg/GroovyConfigPropertySourceLoaderSpec.groovy index b3919b5227..cf65e643c6 100644 --- a/grails-core/src/test/groovy/org/grails/core/cfg/GroovyConfigPropertySourceLoaderSpec.groovy +++ b/grails-core/src/test/groovy/org/grails/core/cfg/GroovyConfigPropertySourceLoaderSpec.groovy @@ -1,20 +1,18 @@ /* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * https://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.grails.core.cfg @@ -49,7 +47,7 @@ class GroovyConfigPropertySourceLoaderSpec extends Specification implements Envi def config = new PropertySourcesConfig(propertySources) then: - config.size() == 9 + config.size() == 8 config.getProperty("my.local.var", String.class) == "test" config.getProperty("foo.bar", String.class) == "test" config.getProperty("userHomeVar", String.class) diff --git a/grails-core/src/test/resources/builtin-config.groovy b/grails-core/src/test/resources/builtin-config.groovy index 0cc9c0b04b..fefee18c88 100644 --- a/grails-core/src/test/resources/builtin-config.groovy +++ b/grails-core/src/test/resources/builtin-config.groovy @@ -1,4 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + userHomeVar=userHome -grailsHomeVar=grailsHome appNameVar=appName appVersionVar=appVersion diff --git a/grails-doc/src/en/guide/conf/config.adoc b/grails-doc/src/en/guide/conf/config.adoc index c33d76f8d0..4748016cfc 100644 --- a/grails-doc/src/en/guide/conf/config.adoc +++ b/grails-doc/src/en/guide/conf/config.adoc @@ -42,7 +42,6 @@ For Groovy configuration the following variables are available to the configurat *Variable*|*Description* userHome|Location of the home directory for the account that is running the Grails application. -grailsHome|Location of the directory where you installed Grails. If the `GRAILS_HOME` environment variable is set, it is used. appName|The application name as it appears in build.gradle. appVersion|The application version as it appears in build.gradle. |=== diff --git a/grails-doc/src/en/guide/contributing/build.adoc b/grails-doc/src/en/guide/contributing/build.adoc index 299d6bfe01..5c5f98c551 100644 --- a/grails-doc/src/en/guide/contributing/build.adoc +++ b/grails-doc/src/en/guide/contributing/build.adoc @@ -22,40 +22,43 @@ If you're interested in contributing fixes and features to any part of grails, y * A JDK (17 or above) * A git client -Once you have all the pre-requisite packages installed, the next step is to download the Grails source code, which is hosted at http://github.com[GitHub] in several repositories owned by the http://github.com/grails["grails" GitHub user]. This is a simple case of cloning the repository you're interested in. For example, to get the core framework run: +Once you have all the pre-requisite packages installed, the next step is to download the Grails source code, which is hosted at http://github.com/apache/grails-core[GitHub]. +This is a simple case of cloning the repository you're interested in. +For example, to get the core framework run: [source,groovy] ---- -git clone http://github.com/grails/grails-core.git +git clone http://github.com/apache/grails-core.git ---- This will create a "grails-core" directory in your current working directory containing all the project source files. The next step is to get a Grails installation from the source. +=== Using Grails Shell -=== Creating a Grails installation - - -If you look at the project structure, you'll see that it doesn't look much like a standard `GRAILS_HOME` installation. But, it's very simple to turn it into one. Just run this from the root directory of the project: +If you want to use a custom version of the grails shell to generate an application, you can do so by generating the shell distribution. [source,groovy] ---- ./gradlew grails-shell-cli:installDist ---- -This will fetch all the standard dependencies required by Grails and then build a `GRAILS_HOME` installation. Note that this target skips the extensive collection of Grails test classes, which can take some time to complete. +This will fetch all the standard dependencies required by Grails, build it, and then generate a zip file containing the necessary shell script to invoke the grails-shell-cli. -Once the above command has finished, simply set the `GRAILS_HOME` environment variable to the directory `grails-shell-cli/build/install/grails` and add the `bin` directory to your path. When you next type `grails` command to run, you'll be using the version you just built. +Once the above command has finished, extract one of files located under `grails-shell-cli/build/distributions` to a desired location. +Under the extracted location is a `bin` directory. +Add it to your path. +When you next type `grails-shell-cli` command to run, you'll be using the version you just built. If you are using http://sdkman.io[SDKMAN] then that can also be used to work with this local installation via the following: [source,groovy] ---- -sdk install grails dev /path/to/grails-core +sdk install grails dev /path/to/extracted/files ---- You will also need to publish your local installation to your local maven. ---- -./gradlew pTML +./gradlew publishToMavenLocal ---- Now you will have a dev version in your local which you can use to test your features. @@ -68,10 +71,11 @@ All you have to do to run the full suite of tests is: [source,groovy] ---- -./gradlew test +./gradlew check ---- -These will take a while (15-30 mins), so consider running individual tests using the command line. For example, to run the test spec `BinaryPluginSpec` simply execute the following command: +These will take a while (15-30 mins on slower machines, modern hardware will run the build in approximately 5 minutes), so consider running individual tests using the command line. +For example, to run the test spec `BinaryPluginSpec` simply execute the following command: [source,groovy] ---- ./gradlew :grails-core:test --tests *.BinaryPluginSpec @@ -79,6 +83,7 @@ These will take a while (15-30 mins), so consider running individual tests using Note that you need to specify the sub-project that the test case resides in, because the top-level "test" target won't work.... +Please also note that a container runtime is required to run tests. === Developing in IntelliJ IDEA @@ -92,30 +97,6 @@ You need to run the following gradle task: Then open the project file which is generated in IDEA. Simple! -=== Developing in STS / Eclipse - - -You need to run the following gradle task: -[source,groovy] ----- -./gradlew cleanEclipse eclipse ----- - -Before importing projects to STS do the following action: - -* Edit grails-scripts/.classpath and remove the line "<classpathentry kind="src" path="../scripts"/>". - -Use "Import->General->Existing Projects into Workspace" to import all projects to STS. There will be a few build errors. To fix them do the following: - -* Add the springloaded-core JAR file in $GRAILS_HOME/lib/org.springsource.springloaded/springloaded-core/jars to grails-core's classpath. -* Remove "src/test/groovy" from grails-plugin-testing's source path GRECLIPSE-1067 -* Add the jsp-api JAR file in $GRAILS_HOME/lib/javax.servlet.jsp/jsp-api/jars to the classpath of grails-web -* Fix the source path of grails-scripts. Add linked source folder linking to "../scripts". If you get build errors in grails-scripts, do "../gradlew cleanEclipse eclipse" in that directory and edit the .classpath file again (remove the line "<classpathentry kind="src" path="../scripts"/>"). Remove possible empty "scripts" directory under grails-scripts if you are not able to add the linked folder. -* Do a clean build for the whole workspace. -* To use Eclipse GIT scm team provider: Select all projects (except "Servers") in the navigation and right click -> Team -> Share project (not "Share projects"). Choose "Git". Then check "Use or create repository in parent folder of project" and click "Finish". -* Get the recommended code style settings from the http://grails.1312388.n4.nabble.com/Grails-development-code-style-IDE-formatting-settings-tp3854216p3854216.html[mailing list thread] (final style not decided yet, currently http://grails.1312388.n4.nabble.com/attachment/3854262/0/profile.xml[profile.xml]). Import the code style xml file to STS in Window->Preferences->Java->Code Style->Formatter->Import . Grails code uses spaces instead of tabs for indenting. - - === Debugging Grails or a Grails application diff --git a/grails-doc/src/en/guide/gettingStarted/downloadingAndInstalling.adoc b/grails-doc/src/en/guide/gettingStarted/downloadingAndInstalling.adoc index f1cb37e0c8..e1d01620ad 100644 --- a/grails-doc/src/en/guide/gettingStarted/downloadingAndInstalling.adoc +++ b/grails-doc/src/en/guide/gettingStarted/downloadingAndInstalling.adoc @@ -39,12 +39,12 @@ You can find more information about SDKMAN usage on the https://sdkman.io/usage[ For manual installation follow these steps: -* https://github.com/apache/grails-core/releases[Download] a binary distribution of Grails and extract the resulting zip file to a location of your choice -* Set the GRAILS_HOME environment variable to the location where you extracted the zip +* https://github.com/apache/grails-core/releases[Download] a binary distribution of Grails and extract the resulting zip file to a location of your choice. +Then add the bin directory to your system path. === Unix/Linux -** This is typically a matter of adding something like the following `export GRAILS_HOME=/path/to/grails` to your profile -** This can be done by adding `export PATH="$PATH:$GRAILS_HOME/bin"` to your profile + +** This can be done by adding `export PATH="$PATH:/path/to/grails/bin"` to your profile === Windows ** Copy the path to the bin directory inside the grails folder you have downloaded, for example, diff --git a/grails-doc/src/en/ref/Command Line.adoc b/grails-doc/src/en/ref/Command Line.adoc index 7f34649b16..dc3433b791 100644 --- a/grails-doc/src/en/ref/Command Line.adoc +++ b/grails-doc/src/en/ref/Command Line.adoc @@ -35,7 +35,6 @@ Grails searches in the following directories for Gant scripts to execute: * `USER_HOME/.grails/scripts` * `PROJECT_HOME/src/main/scripts/` * `PROJECT_HOME/plugins/*/scripts` -* `GRAILS_HOME/scripts` If multiple matches are found Grails will give you a choice of which one to execute. diff --git a/grails-gradle/model/src/main/groovy/grails/util/BuildSettings.groovy b/grails-gradle/model/src/main/groovy/grails/util/BuildSettings.groovy index e9811e4dba..dd7dd52d89 100644 --- a/grails-gradle/model/src/main/groovy/grails/util/BuildSettings.groovy +++ b/grails-gradle/model/src/main/groovy/grails/util/BuildSettings.groovy @@ -176,12 +176,6 @@ class BuildSettings { */ public static final String CONVERT_CLOSURES_KEY = "grails.compile.artefacts.closures.convert" - - /** - * The location of the local Grails installation. Will be null if not known - */ - public static final File GRAILS_HOME = System.getProperty('grails.home') ? new File(System.getProperty('grails.home')) : null - /** * The base directory of the project */ diff --git a/grails-gradle/model/src/main/groovy/grails/util/Environment.groovy b/grails-gradle/model/src/main/groovy/grails/util/Environment.groovy index ca510deed2..59e6c856fc 100644 --- a/grails-gradle/model/src/main/groovy/grails/util/Environment.groovy +++ b/grails-gradle/model/src/main/groovy/grails/util/Environment.groovy @@ -1,20 +1,18 @@ /* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at * - * https://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package grails.util @@ -76,10 +74,6 @@ enum Environment { */ public static final String ENV_KEY = "GRAILS_ENV" - /** - * The name of the GRAILS_HOME environment variable - */ - public static String ENV_GRAILS_HOME = "GRAILS_HOME" /** * Specify whether reloading is enabled for this environment */ diff --git a/grails-shell-cli/build.gradle b/grails-shell-cli/build.gradle index bd03c8506c..ac5f39e0c8 100644 --- a/grails-shell-cli/build.gradle +++ b/grails-shell-cli/build.gradle @@ -138,7 +138,7 @@ apply { } extensions.configure(JavaApplication) { - it.applicationName = 'grails' + it.applicationName = 'grails-shell-cli' it.mainClass = 'org.grails.cli.GrailsCli' it.applicationDefaultJvmArgs = ['-XX:+TieredCompilation', '-XX:TieredStopAtLevel=1', '-XX:CICompilerCount=3'] it.applicationDistribution.with { @@ -150,7 +150,7 @@ extensions.configure(JavaApplication) { tasks.named('startScripts').configure { it -> it.doLast { - File win = project.layout.buildDirectory.file("scripts/grails.bat").get().asFile + File win = project.layout.buildDirectory.file("scripts/grails-shell-cli.bat").get().asFile win.text = win.text.replaceFirst(/(?m)^set CLASSPATH=.*$/,'set CLASSPATH=%APP_HOME%\\\\lib\\\\*') } } \ No newline at end of file