是否可以将 grails 二进制插件中的类用作 groovy 项目中的常规依赖项?
在许多不同的方法之后,答案似乎是否定的,但我觉得只是缺少处理依赖关系的一小部分。
使用:
域名
打印“嗨”并定期依赖
'sample-grails-1.0-SNAPSHOT.jar'
问题:
NoClassDefFoundError:org/grails/datastore/mapping/dirty/checking/DirtyCheckable。
NoClassDefFoundError: Lorg/codehaus/groovy/grails/plugins/web/api/ControllersDomainBindingApi;
编译正常
在运行时崩溃:
线程“主”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 > *'>
<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/