【问题标题】:Gradle: how to exclude jar from an ear file?Gradle:如何从耳朵文件中排除jar?
【发布时间】:2018-01-04 07:06:32
【问题描述】:

我有一个关于从耳朵工件中排除 jar 文件的问题。我的项目有以下模块:

project
 - ejb_module
 - war_module
 - ear_module
 - other_module

在我的ear_module/build.gradle:

dependencies {
    deploy project(ejb_module)
    earlib project(ejb_module)

    deploy project(war_module)
    earlib project(war_module)
}

问题是我如何排除从war_module 生成的 jar 工件。

war_module 可以生成 war 和 jar 工件。我需要jar神器的原因是我的other_module依赖它。

一个复杂的因素是war_module 有一些依赖项需要通过earlib。

所以我的问题是如何从 ear 文件中排除 war_module.jar?它包含在根目录和APP-INF/lib 中。

【问题讨论】:

    标签: gradle jar dependencies war ear


    【解决方案1】:

    我假设在您的war_module 中,您同时应用了war 和java 插件来获得.war. 和.jar 工件?

    试试:

    deploy project(path: 'war_module', configuration: 'archives')
    earlib project(path: 'war_module', configuration: 'archives')
    

    它应该选择一个.war,只是因为如果查看 Gradle war 插件代码,你可以看到它覆盖了项目的默认输出,如果包含 java 插件。

    此外,war 插件使用 java 插件在后台编译您的代码。


    当然,您可以使用

    简单地从构建中排除人工制品
    config (project){exclude module: 'name'}
    

    但我认为这不是你能做的最好的。


    尝试查看 providedRuntime 和 runtimeOnly 配置,具体取决于您使用的 Gradle 版本。

    如果工件用于编译,则 compileOnly 等。

    dependecies{} 中使用的此配置将使用 jar,但不会在其他任何地方公开它,因此它不应该落在您构建的任何人工制品中,这可能是最适合您的情况,但是问题不是问这个问题,它只是一个建议。

    【讨论】:

    • 谢谢,但没用。我通过添加更接近了: foo { extendsFrom runtime } 但它仍然包含来自 war_module 的 jar 文件。配置:存档无效。
    • 那么我认为你的架构中有些东西搞砸了。如何创建战争和罐子?
    【解决方案2】:

    假设您的 EAR 包含另一个现有 jar,如 xxx.yyy.zzz.jar。

    在你耳朵项目的build.gradle,添加以下内容

    ext.replacement = 'your.group:xxx.yyy.zzz:your.version'
    
    configurations.all {
        resolutionStrategy {
            eachDependency { DependencyResolveDetails details ->
                // remove to.be.excluded.jar
                if (details.requested.group == 'your.group' &&
                    details.requested.name == 'to.be.excluded' && 
                    details.requested.version == 'your.version') {
                    details.useTarget replacement
                }
            }
        }
    }
    

    这样,to.be.excluded.jar 将被 xxx.yyy.zzz.jar 替换,这实际上将其从 EAR 中删除。

    【讨论】:

      猜你喜欢
      • 2012-03-19
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 2016-01-28
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多