【问题标题】:Grails-Camel Plugin won't install or runGrails-Camel 插件无法安装或运行
【发布时间】:2015-04-22 15:06:24
【问题描述】:

请注意:虽然这个问题涉及一个名为 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: 

这是怎么回事?!?我如何安装/使用这个插件?!?我是不是疯了,还是这个插件根本不起作用?


更新

我运行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

【问题讨论】:

  • 运行 cleancompile 然后尝试使用插件。
  • 只是想知道为什么要在 gradle,而不是 java DSL 或 xml 中配置路由?
  • 你能在create-route之前尝试grails clean-allgrails refresh-dependencies
  • 感谢@JoshuaMoore 和mehmood,但是请查看我的更新,因为清理和刷新依赖项只会让事情变得更糟。至于 vikingstever,对不起,但这与 Gradle 完全无关。

标签: grails apache-camel grails-plugin


【解决方案1】:

每当您在 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

它会起作用的。请注意,我稍微更改了示例以包含一个包 - 始终使用包:)

【讨论】:

  • 感谢@Burt Beckwith - 我很感谢您花时间和帮助解决这个问题,但事实上该插件一开始就存在如此多的错误,再加上代码库在 5 个月内没有改变的事实让我想逃离这个插件踢和尖叫。我想我会想出另一种从后台/工作线程启动骆驼路线的方法。 有什么想法吗?再次感谢!
  • 一种方法是联系开发人员,看看他们是否仍然活跃。如果您觉得没有人使用您创建的东西,您通常不会有很大的动力去更新它:) 另一种选择是借用一些有效的代码(一定要尊重他们选择的许可证和归属等的要求)并且当然,您总是可以像在非 Grails 应用程序中那样做 - 根据他们的文档集成 Camel。
猜你喜欢
  • 2011-10-12
  • 2015-04-27
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2015-02-05
相关资源
最近更新 更多