gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:08:00 24 4
gpt4 key购买 nike

是否可以将 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com