我有grails 1.3.7应用程序。我利用Spring的JMS类将我的grails服务之一设置为消息侦听器,并在grails-app / conf / resources.groovy中设置了这些类。我正在使用maven 2.0.9进行构建,使用grails-maven-plugin 1.3.7和“ maven-war”目标来创建war文件。

我有两种情况:

  1. 我希望能够使用“ mvn grails:run-app”从命令行在本地运行grails应用程序。我在开发过程中会用到它。
  2. 我希望能够通过部署maven创建的war文件在JBoss 5.1.0 GA中运行应用程序。这就是我们在集成,测试和生产环境中所做的事情。

    在JBoss内部运行时,所有与JMS提供者相关的依赖关系都可以由应用程序服务器使用并提供。用maven处理此问题的正常方法是在pom文件中声明这些依赖关系,范围为“提供”。这将使这些依赖项可用于编译和单元测试,但将它们从war文件中排除。

    但是,当我从命令行使用“ mvn grails:run-app”在本地运行时,这些依赖关系似乎在运行时不可用,如许多ClassNotFound等异常所证明的那样。将范围更改为“编译”使我可以在本地运行。但是,现在这些依赖项被打包到我的war文件中,我不希望这样做,并且在JBoss中运行时会破坏某些东西。

    我现在发现的解决方案(或解决方法)是在pom中包括具有默认(编译)作用域的这些JMS依赖项,并通过BuildConfig中的一些代码从war文件中删除这些jar(及其所有传递依赖项) .groovy(请参见下文)。这行得通,但是很麻烦而且容易出错,因为我必须列出每个传递性依赖项(其中有很多!)。

    我尝试过的其他一些事情:

    首先,我认为我可以在“ grails.project.dependency.resolution / dependencies”部分中将所需的JMS依赖项添加到BuildConfig.groovy中,并将其完全排除在pom之外。但是,这没有用,因为根据此链接,在maven下运行grails时,将忽略BuildConfig依赖项部分。

    我还注意到“ pom true”选项(在上面的链接中提到)并尝试使用它。但是,当尝试运行grails:run-app时,grails会引发有关未解决的依赖项的警告并给出tomcat错误: 通用标签

    我的问题: 是否有更好的方法-通过grails和/或maven配置选项-完成我想要的工作-即能够在本地和JBoss中成功运行grails,而不必手动从war文件中排除所有传递依赖项?

    注意:我无法更改正在使用的grails,JBoss或Maven的版本。

    相关文件的一些摘录:

    BuildConfig.groovy: 通用标签

    pom.xml: 通用标签

    resources.groovy: 通用标签

有帮助吗?

解决方案

解决方案是通过配置文件为您的依赖项创建动态范围。

示例: 通用标签

然后在命令行中指定配置文件时: 通用标签

希望这会有所帮助。

其他提示

此问题已在Grails 2.0中“修复”。用于grails的maven插件已更新,因此“提供的”范围意味着该依赖项在本地运行时可用,但未包含在软件包war文件中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top