Grails-Camel 插件无法安装或 运行
Grails-Camel Plugin won't install or run
请注意:虽然这个问题涉及一个名为 Apache Camel 的库,但我真的认为这只是一个关于现代 Grails 插件如何工作的问题。
我在这里使用的是 Grails 2.4.2,我正在尝试将 Apache Camel 与 Grails 一起使用,发现 Grails Routing 插件甚至无法安装。
指示说明要通过发出 grails install-plugin routing
安装。当我这样做时,我得到:
grails install-plugin routing
Starting process on LT-IE-ZH/10.10.99.14
Loading Grails 2.4.2
|Configuring classpath
.
|Environment set to development
......Warning
|
Since Grails 2.3, it is no longer possible to install plugins using the install-plugin command.
Plugins must be declared in the grails-app/conf/BuildConfig.groovy file.
Example:
grails.project.dependency.resolution = {
...
plugins {
compile ":routing:1.3.2"
}
}
所以我像这样修改我的BuildConfig.groovy
:
plugins {
// plugins for the build system only
build ":tomcat:7.0.54"
compile ":routing:1.3.2"
...lots of other stuff omitted for brevity
}
然后插件说要创建路由,发出 grails create-route <RouteName>
。所以我就是这么做的:
grails create-route OrderListener
Starting process on LT-IE-ZH/10.10.99.14
Loading Grails 2.4.2
|Configuring classpath
|Running pre-compiled script
|Script 'CreateRoute' not found, did you mean:
1) CreateFilters
2) CreatePom
3) CreateApp_
4) CreateController
5) CreateHibernateCfgXml
Please make a selection or enter Q to quit:
这是怎么回事?!? 我如何 install/use 这个插件?!?我是疯了,还是这个插件根本不起作用?
更新
我 运行 grails clean-all
,然后 grails refresh-dependencies
然后 grails create-route OrderListener
我得到:
Loading Grails 2.4.2
.
|Environment set to development
.....Error
|
groovy.lang.MissingMethodException: No signature of method: CreateRoute.createArtifact() is applicable for argument types: () values: []
Error |
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Error |
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
Error |
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
Error |
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
Error |
<huge stacktrace omitted>
Error |
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:207)
Error |
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:68)
Error |
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
Error |
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
Error |
... 68 more
每当您在 BuildConfig.groovy
中进行更改时,请务必 运行 grails compile
触发依赖项解析,这将下载新的和更新的插件和 jar,它还会编译您的有助于确保至少最低限度兼容的代码。
但这里的核心问题是插件的 CreateRoute.groovy
脚本严重损坏。它缺少一个重要的包含并且没有接近正确地调用 createArtifact
。在作者解决此问题之前,作为解决方法,请在您应用的 scripts
文件夹中创建一个名为 CreateCamelRoute.groovy
的脚本,内容如下:
includeTargets << grailsScript('_GrailsCreateArtifacts')
target(createCamelRoute: "Creates a new Camel Route.") {
createArtifact(type: 'Route', path: 'grails-app/routes', name: argsMap.params?.get(0) ?: 'Example', suffix: 'Route')
}
setDefaultTarget(createCamelRoute)
它有意与原来的名称不同,因为如果 Grails 发现两个名称相同,它会询问使用哪一个。这样你就可以 运行
grails create-camel-route com.foo.bar.OrderListener
它会起作用的。请注意,我稍微更改了示例以包含一个包 - 始终使用包 :)
请注意:虽然这个问题涉及一个名为 Apache Camel 的库,但我真的认为这只是一个关于现代 Grails 插件如何工作的问题。
我在这里使用的是 Grails 2.4.2,我正在尝试将 Apache Camel 与 Grails 一起使用,发现 Grails Routing 插件甚至无法安装。
指示说明要通过发出 grails install-plugin routing
安装。当我这样做时,我得到:
grails install-plugin routing
Starting process on LT-IE-ZH/10.10.99.14
Loading Grails 2.4.2
|Configuring classpath
.
|Environment set to development
......Warning
|
Since Grails 2.3, it is no longer possible to install plugins using the install-plugin command.
Plugins must be declared in the grails-app/conf/BuildConfig.groovy file.
Example:
grails.project.dependency.resolution = {
...
plugins {
compile ":routing:1.3.2"
}
}
所以我像这样修改我的BuildConfig.groovy
:
plugins {
// plugins for the build system only
build ":tomcat:7.0.54"
compile ":routing:1.3.2"
...lots of other stuff omitted for brevity
}
然后插件说要创建路由,发出 grails create-route <RouteName>
。所以我就是这么做的:
grails create-route OrderListener
Starting process on LT-IE-ZH/10.10.99.14
Loading Grails 2.4.2
|Configuring classpath
|Running pre-compiled script
|Script 'CreateRoute' not found, did you mean:
1) CreateFilters
2) CreatePom
3) CreateApp_
4) CreateController
5) CreateHibernateCfgXml
Please make a selection or enter Q to quit:
这是怎么回事?!? 我如何 install/use 这个插件?!?我是疯了,还是这个插件根本不起作用?
更新
我 运行 grails clean-all
,然后 grails refresh-dependencies
然后 grails create-route OrderListener
我得到:
Loading Grails 2.4.2
.
|Environment set to development
.....Error
|
groovy.lang.MissingMethodException: No signature of method: CreateRoute.createArtifact() is applicable for argument types: () values: []
Error |
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Error |
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
Error |
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
Error |
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
Error |
<huge stacktrace omitted>
Error |
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:207)
Error |
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:68)
Error |
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
Error |
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
Error |
... 68 more
每当您在 BuildConfig.groovy
中进行更改时,请务必 运行 grails compile
触发依赖项解析,这将下载新的和更新的插件和 jar,它还会编译您的有助于确保至少最低限度兼容的代码。
但这里的核心问题是插件的 CreateRoute.groovy
脚本严重损坏。它缺少一个重要的包含并且没有接近正确地调用 createArtifact
。在作者解决此问题之前,作为解决方法,请在您应用的 scripts
文件夹中创建一个名为 CreateCamelRoute.groovy
的脚本,内容如下:
includeTargets << grailsScript('_GrailsCreateArtifacts')
target(createCamelRoute: "Creates a new Camel Route.") {
createArtifact(type: 'Route', path: 'grails-app/routes', name: argsMap.params?.get(0) ?: 'Example', suffix: 'Route')
}
setDefaultTarget(createCamelRoute)
它有意与原来的名称不同,因为如果 Grails 发现两个名称相同,它会询问使用哪一个。这样你就可以 运行
grails create-camel-route com.foo.bar.OrderListener
它会起作用的。请注意,我稍微更改了示例以包含一个包 - 始终使用包 :)