无法排除jar内的依赖项

时间:2016-08-18 06:10:32

标签: java intellij-idea gradle build.gradle

我有一个项目(B),它编译一个本地jar(A)。我需要在jar(A)中排除一个依赖项,但是在构建jar时我不能这样做。我可以按照自己的意愿构建jar,但是我必须在其中包含这些依赖项,并且只在项目B中将它们排除。

这是build.gradle项目A的jar:

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'application'

repositories {
    mavenCentral()
}

jar {
    baseName = 'test'
    version =  '0.1.0'

    manifest {
        attributes ("Main-Class": "Main")
    }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.4.0.RELEASE") // I need this excluded later
    compile("org.springframework.boot:spring-boot-starter-jetty:1.4.0.RELEASE") // I need this excluded later
    /*
    some other dependencies here
    */
}

这是项目B的build.gradle:

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'application'

repositories {
    mavenCentral()
    flatDir(dirs: "lib")
}

sourceCompatibility = 1.8

dependencies {
   compile ':test:0.1.0' // this is the jar I need to exclude some things from

   compile("org.springframework.boot:spring-boot-starter-web:1.4.0.RELEASE")
   compile("org.springframework.boot:spring-boot-starter-jetty:1.4.0.RELEASE")
}

似乎使用常规排除子句不起作用

compile (':test:0.1.0') {
    exclude group: 'org.springframework.boot' // doesn't work
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我从here得到了答案。显然,不可能从文件存储库中读取group等属性。我最终将我的依赖项发布到私有存储库(tutorial)并从那里导入。

答案 1 :(得分:0)

我明白了你的意思。基于该组的排除不能使用flatDir repo,因为平面目录没有组信息。 所以最好包括测试:0.1.0'在libs文件夹ProjectB中使用jar而不是在flatDir repo中添加它。 因此,通过使用fileTree,我们可以获得ProjectB的依赖项ProjectA(test:0.1.0 jar)。 从文件树中我们可以排除在jar(A)中排除依赖。 请仔细阅读以下代码:

select * 
from (
   select distinct on (a.batch) c.id,a.partid,b.partname,c.stock_stock,
   from components a 
      join parts b using(partid)
      left join (
         select * 
         from componentsreport($1)
      ) c using (partid)
      JOIN start_work d on d.batchid=a.batchid
   where  b.issub
   group by c.id,a.partid,b.partname,c.stock
   order by a.batch
) tmp 
where tmp.id = 3436

这里我们将../webserver/lib中的所有jar包括为依赖项。

只需在fileTree上使用排除。语法与include相同。

这应该有用。