如何从WEB-INF / lib中排除特定的jar

时间:2014-04-17 04:18:04

标签: gradle

我有以下gradle项目:

jar-module-A
  +-- JavaEE lib(Dependency)

war-module-A
  +-- jar-module-A

我想从WEB-INF / lib中排除JavaEE lib。

  1. 使用providedCompile:

    由于jar-module-A不是web模块而是jar,我不能在jar-module-A的build.gradle中使用providedCompile。

  2. 配置{runtime.exclude JavaEE-lib}

    它不仅从运行时而且还从testRuntime中排除JavaEE,它在war-module-A中通过ClassNotFoundException使单元测试失败。

  3. 如何缓解这种情况?

2 个答案:

答案 0 :(得分:4)

暴力解决方案将是:

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'maven'

repositories {
  mavenCentral()
  maven {
    url "file:///tmp/repo"
  }
}

uploadArchives {
  repositories {
    mavenDeployer {
      repository(url: "file:///tmp/repo")
    }   
  }
}

dependencies {
  compile group: 'ruimo', name: 'module_a', version: '1.0-SNAPSHOT'
  testCompile group: 'junit', name: 'junit', version: '4.10'
}

war {
    classpath = classpath.filter {
        it.name != 'javaee-api-6.0.jar'
    }   
}

代表module_b。它可能与文件名有关(不确定)。也许稍后会看一下,但不确定 - 随着时间的推移而缩短。

<强>更新

更复杂:

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'maven'

repositories {
  mavenCentral()
  maven {
    url "file:///tmp/repo"
  }
}

uploadArchives {
  repositories {
    mavenDeployer {
      repository(url: "file:///tmp/repo")
    }
  }
}

dependencies {
  compile(group: 'ruimo', name: 'module_a', version: '1.0-SNAPSHOT') {
    transitive = false// here You can exclude particular dependency, not necessarily all
  }
  providedCompile group: 'javax', name: 'javaee-api', version: '6.0'
  testCompile group: 'junit', name: 'junit', version: '4.10'
}

不,我看到它可以通过多种方式完成。这取决于构建的其他要求。

答案 1 :(得分:0)

如果传递不起作用,可以尝试分辨率startegy 。 我厌倦了传递或甚至正常的排除。

https://docs.gradle.org/2.2.1/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

dependencies{
        compile(group: 'ruimo', name: 'module_a', version: '1.0-SNAPSHOT')
    }

configurations.all {
    resolutionStrategy {
        force ruimo:module_a:1.0-SNAPSHOT
    }
}