是否可以将grails二进制插件中的类用作groovy项目中的常规依赖项?
经过许多不同的方法之后,答案似乎是否定的,但我觉得只有一个缺失的小部分处理依赖关系。
如果您不添加任何内容,则无法编译:
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”
编译确定
在运行时崩溃:
线程“main”中的异常java.lang.NoClassDefFoundError:javax / servlet / ServletResponse at 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) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 在org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77) at 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) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ......还有13个
答案 0 :(得分:2)
创建二进制插件并不是最好的方法,因为二进制插件确实需要Grails环境。但是,您可以使用Gradle创建二进制插件。 Cloud Foundry团队这样做,您需要做的就是创建您的插件类。例如:
然后创建一个指向该类的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>