Gradle:如何从耳朵文件中排除jar?

问题描述 投票:0回答:2

我有一个关于从耳神器中排除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产生战争和jar神器。我需要jar神器的原因是我的other_module依赖它。

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

所以我的问题是我如何从耳朵文件中排除war_module.jar?它包括在根和APP-INF/lib

gradle jar dependencies war ear
2个回答
0
投票

我在你的war_module中假设你正在应用warjava插件来获取.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'}

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


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

如果人工制品用于编译,那么compileOnly等。

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


0
投票

xxx.yyy.zzz.jar说,假设你的EAR包含另一个现有的罐子。

在您耳朵项目的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中移除。

© www.soinside.com 2019 - 2024. All rights reserved.