【问题标题】:Excluding grails-plugin dependencies using the POM使用 POM 排除 grails-plugin 依赖项
【发布时间】:2011-12-01 18:44:06
【问题描述】:

先生们,女士们……

这是问题: 我正在一个复杂的异构系统中集成一个 grails 应用程序,该系统使用 maven 来构建和获取依赖项。 很公平,有几种不同的方法可以添加插件,但我希望所有依赖项都由 maven 管理,因为依赖关系树中的冲突和范围将由 maven 解决。

这将在验证时安装休眠插件,并解决其依赖关系

<execution>
<id>Hibernate plugin</id>
        <phase>validate</phase>
        <goals>
    <goal>install-plugin</goal>
</goals>
<configuration>
    <pluginName>hibernate</pluginName>
    <pluginVersion>${grails.version}</pluginVersion>
</configuration>
</execution>

显然,没有办法直接在执行配置中指定排除项,以防止它独立解析其依赖项(在 dependencies.groovy 脚本中)。

我试过了

<dependency>
    <groupId>javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.11.0.GA</version>
    <scope>provided</scope>
</dependency>

依赖不会出现在目标构建目录中WEB-INF文件夹的lib目录中。然而,它仍然被打包在战争档案中。 请记住,目标是使用 maven 处理所有与依赖项相关的事情。 但无论如何,由于似乎没有希望使用 pom 排除它,我尝试使用 BuildConfig :

case Environment.PRODUCTION :
    build( "org.grails.plugins:hibernate:1.3.7" ) {
      excludes "javassist"
    }
break

这是最后的手段,它有效。在此处指定构建,将有效地覆盖来自 groovy 脚本的依赖项。

所以我的问题是,有没有办法使用 maven 覆盖这些依赖项?

显然,我验证了我试图在提供的范围内的依赖项不包含在其他任何地方(它被排除在 grails-gorm 之外)。

有没有简单的方法来解决这个问题?

更新:

为了防止战争解决 jar 依赖关系,有一个 --nojars 标志,但是 grails war mojo 的战争目标不允许传递 args。 exec mojo 可以,但是对于这个插件的一个实例,只有一个可能的执行规范,并且不能为 exec mojo 指定生命周期阶段。

【问题讨论】:

    标签: grails maven


    【解决方案1】:

    我认为您在第一次尝试将依赖项标记为 provided 时走在了正确的轨道上。您错过的部分可能是您没有禁用 grails 依赖项管理。您可以通过在 BuildConfig.groovy 中设置 pom true 并删除所有其他依赖项来做到这一点,如下所示:

    grails.project.dependency.resolution = {
         pom true
    
         // inherit Grails' default dependencies
         inherits("global") {
         }
     }
    

    完成此操作后,maven 将处理所有依赖项。

    编辑:我刚刚意识到这是一篇非常老的帖子,所以 pom true 可能没有在您当时使用的 Grails 版本中引入。我认为它出现在 2.2 或类似的版本中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-29
      • 2014-12-02
      • 2016-06-11
      • 2023-03-04
      • 1970-01-01
      • 2018-04-12
      • 2021-02-27
      • 2017-03-15
      相关资源
      最近更新 更多