我有一个关于从耳神器中排除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
?它包含在root和APP-INF/lib
中。
答案 0 :(得分:0)
我假设您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但不会在其他任何地方暴露它,那么它不应该落在你构建的任何人工制品中,这可能是你最适合你的情况,但问题并不是在问这个问题,而只是一个建议。
答案 1 :(得分:0)
假设xxx.yyy.zzz.jar
说,假设您的EAR包含另一个现有的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中移除。