<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -70,6 +70,10 @@ target(createPlugin: &quot;The implementation target&quot;)  {
 
     // Rename the plugin descriptor.
     pluginName = GrailsNameUtils.getNameFromScript(grailsAppName)
+    if(!(pluginName ==~ /[a-zA-Z-]+/)) {
+        println &quot;Error: Specified plugin name [$grailsAppName] is invalid. Plugin names can only contain word characters separated by hyphens.&quot;
+        exit 1
+    }
     ant.move(
             file: &quot;${basedir}/GrailsPlugin.groovy&quot;,
             tofile: &quot;${basedir}/${pluginName}GrailsPlugin.groovy&quot;,</diff>
      <filename>grails/scripts/_GrailsCreateProject.groovy</filename>
    </modified>
    <modified>
      <diff>@@ -82,7 +82,11 @@ public abstract class AbstractGrailsPlugin extends GroovyObjectSupport implement
 	public abstract void doArtefactConfiguration();
 
     public String getFileSystemName() {        
-        return GrailsNameUtils.getScriptName(getName())+'-'+getVersion();
+        return getFileSystemShortName()+'-'+getVersion();
+    }
+
+    public String getFileSystemShortName() {
+        return GrailsNameUtils.getScriptName(getName());
     }
 
     public Class getPluginClass() {</diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/plugins/AbstractGrailsPlugin.java</filename>
    </modified>
    <modified>
      <diff>@@ -15,6 +15,7 @@ import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.core.io.Resource;
 import org.springframework.core.type.filter.TypeFilter;
+import org.springframework.util.StringUtils;
 
 import java.util.*;
 
@@ -295,7 +296,7 @@ public abstract class AbstractGrailsPluginManager implements GrailsPluginManager
     public String getPluginViewsPathForClass(Class&lt;? extends Object&gt; theClass) {
         if(theClass!=null) {
             final String path = getPluginPathForClass(theClass);
-            if(path!=null)
+            if(StringUtils.hasText(path))
                 return path +'/'+GrailsResourceUtils.GRAILS_APP_DIR+&quot;/views&quot;;
         }
         return null;  </diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/plugins/AbstractGrailsPluginManager.java</filename>
    </modified>
    <modified>
      <diff>@@ -381,6 +381,12 @@ public interface GrailsPlugin extends ApplicationContextAware, Comparable {
     String getFileSystemName();
 
     /**
+     * Returns the name of the plugin as represented on the file system without the version. For example TagLibGrailsPlugin would result in &quot;tag-lib&quot;
+     * @return The file system name
+     */
+    String getFileSystemShortName();
+
+    /**
      * Returns the underlying class that represents this plugin
      * @return The plugin class
      */</diff>
      <filename>grails/src/java/org/codehaus/groovy/grails/plugins/GrailsPlugin.java</filename>
    </modified>
    <modified>
      <diff>@@ -25,6 +25,10 @@ public class GrailsPluginMetadataTests extends GroovyTestCase{
         assertEquals &quot;/plugins/groovy-pages-${GrailsUtil.grailsVersion}&quot;, pluginManager.getPluginPathForInstance(new Test2())
         assertNull pluginManager.getPluginPathForInstance(new Test3())
 
+
+        assertEquals &quot;/plugins/controllers-${GrailsUtil.grailsVersion}/grails-app/views&quot;, pluginManager.getPluginViewsPathForClass(Test1)
+        assertEquals &quot;/plugins/groovy-pages-${GrailsUtil.grailsVersion}/grails-app/views&quot;, pluginManager.getPluginViewsPathForClass(Test2)
+        assertNull pluginManager.getPluginViewsPathForClass(Test3)
     }
 
 }</diff>
      <filename>grails/src/test/org/codehaus/groovy/grails/plugins/metadata/GrailsPluginMetadataTests.groovy</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>4c1de4da1dbcf51f6c6bf139a6e1022bd142a90d</id>
    </parent>
  </parents>
  <author>
    <name>Graeme Rocher</name>
    <email>graeme.rocher@gmail.com</email>
  </author>
  <url>http://github.com/grails/grails/commit/13522d06062d030e33b6aa86d3ae1feded74cc80</url>
  <id>13522d06062d030e33b6aa86d3ae1feded74cc80</id>
  <committed-date>2009-11-11T05:22:25-08:00</committed-date>
  <authored-date>2009-11-11T05:22:25-08:00</authored-date>
  <message>fix for GRAILS-5349 &quot;Web-app path of user defined plugins not resolved correctly in dev env&quot;</message>
  <tree>2ab31938f91ac5ca55289a1f10e1c67d5140c379</tree>
  <committer>
    <name>Graeme Rocher</name>
    <email>graeme.rocher@gmail.com</email>
  </committer>
</commit>
