我有一个关于从耳神器中排除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
。
我在你的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但不会在其他任何地方暴露它,然后它不应该落在你构建的任何人工制品中,这可能是你最适合你的情况,但问题不是询问这只是一个建议。
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中移除。