使用POM排除Grails插件依赖

3
先生、女士们...
这是问题所在: 我正在将一个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目录中。但是它仍然被打包在war归档文件中。 请记住,使用maven处理所有与依赖项相关的事情是我们的目标。 但是无论如何,由于似乎没有希望使用pom来排除它,我尝试使用BuildConfig:

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

这是最后的办法,它有效。在此指定构建,将有效地覆盖来自Groovy脚本的依赖关系。我的问题是,有没有办法使用Maven覆盖这些依赖项?很明显,我验证了我试图在provided中作用域的依赖项不包含在任何其他地方(它从Grails-GORM中排除)。有没有简单的方法来解决这个问题?更新:为了防止war解析jar依赖项,有一个--nojars标志,但是grails war mojo的war目标不允许传递args。 exec mojo可以,但是对于此插件实例只有一个执行规范,并且无法指定生命周期阶段exec mojo。
1个回答

0

我认为你在第一次尝试将依赖标记为provided时是正确的。你可能错过了的部分是没有禁用Grails依赖管理。你可以通过在BuildConfig.groovy中设置pom true并删除所有其他依赖项来实现:

grails.project.dependency.resolution = {
     pom true

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

完成这一步骤后,Maven 将处理所有依赖项。

编辑:我刚意识到这是一个非常旧的帖子,因此可能在您当时使用的 Grails 版本中尚未引入 pom true。我想它是在2.2或类似版本中引入的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接