繁体   English   中英

使用POM排除grails-plugin依赖项

[英]Excluding grails-plugin dependencies using the POM

男士们,女士们......

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

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

<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指定生命周期阶段。

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

grails.project.dependency.resolution = {
     pom true

     // inherit Grails' default dependencies
     inherits("global") {
     }
 }

一旦完成,maven将处理所有依赖性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM