grails - 在 groovy 项目中使用 grails 插件类?

标签 grails groovy

是否可以将 grails 二进制插件中的类用作 groovy 项目中的常规依赖项?

在许多不同的方法之后,答案似乎是否定的,但我觉得只是缺少处理依赖关系的一小部分。

使用:

  • sample-grails(grails 2.3.7) : 带有一个虚拟的二进制 grails 插件
    域名
  • sample-groovy(groovy 2.2.1) : Groovy 项目
    打印“嗨”并定期依赖
    'sample-grails-1.0-SNAPSHOT.jar'

  • 问题:
  • 如果您不添加任何内容,则不会编译:

    NoClassDefFoundError:org/grails/datastore/mapping/dirty/checking/DirtyCheckable。
  • 添加依赖“org.grails:grails-datastore-gorm-hibernate4:3.0.0.RELEASE”

    NoClassDefFoundError: Lorg/codehaus/groovy/grails/plugins/web/api/ControllersDomainBindingApi;
  • 添加依赖“org.grails:grails-plugin-controllers:2.3.7”

    编译正常

    在运行时崩溃:

    线程“主”java.lang.NoClassDefFoundError 中的异常:javax/servlet/ServletResponse
    在 org.codehaus.groovy.grails.plugins.web.api.ControllersDomainBindingApi.getDomainClass(ControllersDomainBindingApi.java:97)
    在 org.codehaus.groovy.grails.plugins.web.api.ControllersDomainBindingApi.initialize(ControllersDomainBindingApi.java:58)
    在 com.nortia.sample.Other.(Other.groovy)
    在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    在 java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    在 org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77)
    在 org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102)
    在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57)
    在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:182)
    在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:190)
    在 Library.main(Library.groovy:7)
    引起:java.lang.ClassNotFoundException:javax.servlet.ServletResponse
    在 java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    在 java.security.AccessController.doPrivileged( native 方法)
    在 java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    在 java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    在 java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 13 更多
  • 最佳答案

    创建二进制插件并不是最好的方法,因为二进制插件确实需要 Grails 环境。但是,您可以仅使用 Gradle 创建二进制插件。 Cloud Foundry 团队这样做,您需要做的就是创建您的插件类。例子:

    https://github.com/cloudfoundry/java-buildpack-auto-reconfiguration/blob/master/auto-reconfiguration/src/main/groovy/org/cloudfoundry/reconfiguration/grails/JavaBuildpackAutoReconfigurationGrailsPlugin.groovy

    然后创建一个META-INF/grails-plugin.xml指向类的文件。例子:

    https://github.com/cloudfoundry/java-buildpack-auto-reconfiguration/blob/master/auto-reconfiguration/src/main/resources/META-INF/grails-plugin.xml

    然后你可以使用 Gradle 的标准 groovy插件来构建你的项目。

    如果要创建 GORM 实体,则需要添加对 GORM jar 的依赖项。例子:

     compile "org.grails:grails-datastore-gorm-hibernate4:3.1.0.RELEASE"
    

    然后用 grails.persistence.Entity 注释每个 GORM 实体.例子:
     import grails.persistence.*
    
     @Entity
     class Foo { 
        String bar 
     }
    

    然后修改你的grails-plugin.xml文件指向实体。例子:
        <plugin name='myplugin' version='0.1' grailsVersion='2.4 &gt; *'>
          <author>Your name</author>
          <title>My Plugin</title>
          <type>foo.bar.MyGrailsPlugin</type>
          <resources>
            <resource>mybin.Foo</resource>
          </resources>
        </plugin>
    

    关于grails - 在 groovy 项目中使用 grails 插件类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23805439/

    相关文章:

    Grails:Constraints.groovy 中的 transient 属性

    grails - grails/groovy大括号语法问题

    sql - 在 Grails SQL 查询结果中包含列名

    groovy - 将名为 metaClass 的键放入 Map 中

    java - 如何使用Spring Data Mongodb仅检索文档的特定字段?

    grails - grails 3功能测试插件

    grails - 迁移Grails 2.4 MultipleCompilationErrorsException

    groovy - 在项目本身的构建脚本中使用 Gradle 自定义插件

    list - 使用 List-entrys Groovy 进行模式匹配的优雅方式

    java - 如何使用 RestTemplate 转发大文件?