My project is targeted to run in an OSGI container.
It has several sub-modules, most of them heavily depend on spring (framework, integration, amqp) libraries.
The problem is that most of those spring dependencies have transitive dependencies on non OSGI compatible libraries, such as aopalliance:1.0 and commons-logging:1.1.1.
So I have to exclude commons-logging and aopaliance libraries from all my configurations and declare a global runtime dependency on “osgified” libraries, such as jcl-over-slf4j and aopaliance provided by spring ebr repository. This would impact sub-projects that do not depend on spring libraries.
rootProject/build.gradle
allprojects {
afterEvaluate {
configurations.all { conf ->
conf.exclude group: "aopalliance", module: "aopalliance"
conf.exclude group: "commons-logging", module: "commons-logging"
}
dependencies {
// From Spring EBR repository
runtime "org.aopalliance:com.springsource.org.aopalliance:${aopallianceVersion}"
// From Maven central repository
runtime "org.slf4j:jcl-over-slf4j:${slf4jVersion}"
}
}
}
Or I could manually override first level dependencies that results on transitive dependencies like aopaliance or commons-logging, witch would be overkill and could easily become a maintenance nightmare.
In one of my projects I declared a compile dependency on spring-integration-core.
rootProject/subproject-X/build.gradle
dependencies {
compile "${springIntegrationGroup}:spring-integration-core:${springIntegrationVersion}"
}
When I run gradle -q dependencies I get:
Is there a way to get the transitive dependency commons-logging library replaced by jcl-over-slf4j?
Let’s suppose this:
configurations.all { conf ->
**conf.replace {
group: "commons-logging"
module: "commons-logging"
replacement: "org.slf4j:jcl-over-slf4j:${slf4jVersion}"
}**
}
Is that possible? That would be really nice.
My gradle -v output:
------------------------------------------------------------ > Gradle 1.3 > ------------------------------------------------------------ > > Gradle build time: Tuesday, November 20, 2012 11:37:38 AM UTC > Groovy: 1.8.6 > Ant: Apache Ant™ version 1.8.4 compiled on May 22 2012 > Ivy: 2.2.0 > JVM: 1.7.0_07 (Oracle Corporation 23.3-b01) > OS: Windows 7 6.1 amd64